我在print @squares
下面的数组中得到了一个非常奇怪的结果;我应该得到 49 但我得到了一些随机数:
@numbers={-1,7};
my @squares = map { $_ > 5 ? ($_ * $_) : () } @numbers;
print @squares;
Run Code Online (Sandbox Code Playgroud)
$ perl g.pl
12909907697296
这是不正确的:
@numbers={-1,7};
Run Code Online (Sandbox Code Playgroud)
{ }
构建散列并返回对散列的引用。以上等价于
my %anon = ( -1 => 7 );
@numbers = \%anon;
Run Code Online (Sandbox Code Playgroud)
被视为数字的引用将底层指针作为数字返回,因此您会得到垃圾。
要填充数组,请使用
my @numbers = ( -1, 7 );
Run Code Online (Sandbox Code Playgroud)
-1, 7
返回两个数字,在分配给数组时将它们添加到数组中。(括号并不特殊;它们只是像数学一样覆盖优先级。)
完整的程序:
use 5.014; # ALWAYS use `use strict;` or equivalent! This also provides `say`.
use warnings; # ALWAYS use `use warnings;`!
my @numbers = ( -1, 7 );
my @squares = map { $_ > 5 ? ($_ * $_) : () } @numbers;
# Print each number on a separate line.
# Also provides the customary final line feed.
say for @squares;
Run Code Online (Sandbox Code Playgroud)
选择:
my @squares =
map { $_ * $_ }
grep { $_ > 5 }
@numbers;
Run Code Online (Sandbox Code Playgroud)