Что не так с этим утверждением в Perl? - PullRequest
3 голосов
/ 03 мая 2010
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 Ответ

14 голосов
/ 03 мая 2010

Нет необходимости в "$_". Эта строка должна быть:

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

Хотя $_ рассматривается как итератор по умолчанию в циклах for и foreach (см. perlvar ), вы уже присвоили переменную итератора $num.

Вот как правильно использовать $_ в одной строке:

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

На боковой ноте ...

sort по умолчанию использует сравнение строк, что означает, что '10' считается предшествующим '2'. Кажется, вы имеете дело с месяцами (возможно?), Поэтому я использовал блок числового сравнения { $a <=> $b }.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...