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

Vij*_*jay 3 unix perl

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)

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

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

print join(',', sort { $a <=> $b } keys %{$hash{$_}}),"\n" foreach keys %hash;
Run Code Online (Sandbox Code Playgroud)

在旁注...

sort默认情况下使用字符串比较,这意味着它'10'被认为是之前的'2'.你似乎在处理几个月(也许是?),这就是我使用数字比较块的原因{ $a <=> $b }.