这些是我所知道的:
my
”语句的行为(例如“my $x if ...
”)。$i = $i++;
sort()
truncate()
,当LENGTH大于文件的长度时1 << 32
”未定义。以负数位移位也是不确定的。state @a = (1..3)
。答案 0 :(得分:5)
容易绊倒的是在使用each
迭代哈希时过早地突破循环。
#!/usr/bin/perl
use strict;
use warnings;
my %name_to_num = ( one => 1, two => 2, three => 3 );
find_name(2); # works the first time
find_name(2); # but fails this time
exit;
sub find_name {
my($target) = @_;
while( my($name, $num) = each %name_to_num ) {
if($num == $target) {
print "The number $target is called '$name'\n";
return;
}
}
print "Unable to find a name for $target\n";
}
输出:
The number 2 is called 'two'
Unable to find a name for 2
这显然是一个愚蠢的例子,但重点仍然存在 - 当使用each
迭代哈希时,你应该永远不会last
或return
退出循环;或者你应该在每次搜索之前重置迭代器(keys %hash
)。
答案 1 :(得分:4)
这些只是修改正在迭代的结构主题的变体:
map
,grep
和sort
,其中代码引用修改要排序的项目列表。
sort
的另一个问题出现在代码引用不是幂等的(在comp sci意义上) - sort_func($a, $b)
必须始终为任何给定的$a
和{{返回相同的值1}}。