在Perl中反转数组的每个标量

时间:2014-06-01 02:31:42

标签: arrays perl

如何在不反转数组中字符串顺序的情况下,反转三个字符串数组中的每个字符串?

这是我的程序,最后一个命令是我尝试获取数组的每个元素并将其反转的地方。例如:如果我将Andy Sam作为输入,我想要返回ydnA maS,而不是maS ydnA。我做错了什么?

我认为如果我将输入放入数组@ref并通过foreach循环取出该数组的每个元素并将每个元素反转它应该是正确的。

print "Please enter your name: \n";

$userinput = <STDIN>;
chomp ($userinput);

@ref = $userinput;
print "Hello, $userinput.\n";

@get_characters = split(/ /, $userinput);
$strin = join ("" , @get_characters);
$m = length $strin;
print "Your name has ", "$m" , " characters in it.\n";

foreach $e(@ref)
{
    $e = reverse $e;
    print $e;
}

1 个答案:

答案 0 :(得分:5)

您的问题是您正在迭代的数组只有一个元素。您需要拆分名称以获得单个单词:

my @ref = $userinput; # <-- contains a single string.
my @words = split ' ', $userinput;

然后juse使用map。唯一的技巧是你必须强制scalar上下文。

my @words = qw(Andy Sam);
@words = map {scalar reverse} @words;
print "@words";

输出:

ydnA maS

也可以使用for循环编辑同一个数组:

$_ = reverse for @words;