Perl中的这个陈述有什么问题?

时间:2010-05-03 10:18:49

标签: perl unix

print "$_", join(',',sort keys %$h),"\n";

下面给出了一个错误:

Use of uninitialized value in string at missing_months.pl line 36.
1,10,11,12

这个print语句出现在for循环中,如下所示:

foreach my $num ( sort keys %hash )
{
        my $h = $hash{$num};
        print "$_", join(',',sort keys %$h),"\n";
}

1 个答案:

答案 0 :(得分:14)

不需要"$_"。该行应该是:

print join (',' , sort {$a <=> $b} keys %$h),"\n";

虽然$_被视为forforeach循环中的默认迭代器(参见perlvar),但您已将迭代器变量指定为{{1 }}

以下是如何在一行中正确使用$num

$_

在旁注......

默认情况下,

print join(',', sort { $a <=> $b } keys %{$hash{$_}}),"\n" foreach keys %hash; 使用字符串比较,这意味着sort被视为'10'之前。你似乎在处理几个月(也许是?),这就是我使用数字比较块'2'的原因。