print "$_", join(',',sort keys %$h),"\n";
Run Code Online (Sandbox Code Playgroud)
它给我一个错误如下:
Use of uninitialized value in string at missing_months.pl line 36.
1,10,11,12
Run Code Online (Sandbox Code Playgroud)
这个print语句出现在for循环中,如下所示:
foreach my $num ( sort keys %hash )
{
my $h = $hash{$num};
print "$_", join(',',sort keys %$h),"\n";
}
Run Code Online (Sandbox Code Playgroud)
Zai*_*aid 14
不需要"$_".该行应该是:
print join (',' , sort {$a <=> $b} keys %$h),"\n";
Run Code Online (Sandbox Code Playgroud)
虽然它$_被视为for和foreach循环中的默认迭代器(参见perlvar),但您已经将迭代器变量指定为$num.
以下是如何$_在一行中正确使用:
print join(',', sort { $a <=> $b } keys %{$hash{$_}}),"\n" foreach keys %hash;
Run Code Online (Sandbox Code Playgroud)
sort默认情况下使用字符串比较,这意味着它'10'被认为是之前的'2'.你似乎在处理几个月(也许是?),这就是我使用数字比较块的原因{ $a <=> $b }.