Я с тревогой. Хорошо, так что это было, вероятно, самое fun Perl ошибка, которую я когда-либо обнаружил. Даже сегодня я изучаю новый материал о Perl. По сути, оператор триггера ..
, который возвращает false, пока левая сторона не возвращает true, а затем true, пока правая сторона не возвращает false, сохраняет глобальное состояние (или это то, что я предполагаю).
Могу ли я reset его (возможно, это было бы хорошим дополнением к Perl 4-esque вряд ли когда-либо использовалось reset()
)? Или, нет ли способа безопасно использовать этот оператор?
Я также не вижу этого (бит глобального контекста), зарегистрированного где-нибудь в perldoc perlop
, это ошибка?
Код
use feature ':5.10';
use strict;
use warnings;
sub search {
my $arr = shift;
grep { !( /start/ .. /never_exist/ ) } @$arr;
}
my @foo = qw/foo bar start baz end quz quz/;
my @bar = qw/foo bar start baz end quz quz/;
say 'first shot - foo';
say for search \@foo;
say 'second shot - bar';
say for search \@bar;
Спойлер
$ perl test.pl
first shot
foo
bar
second shot