Вот место, где вы должны быть очень осторожны с непреднамеренным использованием оператора скалярного диапазона: возвращает подпрограмму .
sub range {
my $start = shift;
my $end = shift;
return $start .. $end;
}
@foo = range( 1, 5 ); # ( 1, 2, 3, 4, 5 )
$foo = range( 1, 5 ); # False or maybe true. Who knows.
Если вы вызовете эту подпрограмму в скалярном контексте, вас ждет сюрприз.
После того, как меня укусила какая-то разновидность этой проблемы, я теперь всегда проверяю, назначаю ли мне возвращаемый список в массив, тем самым получая поведение, подобное массиву, для моих подпрограмм. Если мне нужно другое специфичное для контекста поведение (очень редко), я использую wantarray
.
sub range {
my $start = shift;
my $end = shift;
my @result = $start .. $end;
return @result;
}