Is Perl's flip-flop operator bugged? It has global state, how can I reset it?
Posted
by Evan Carroll
on Stack Overflow
See other posts from Stack Overflow
or by Evan Carroll
Published on 2010-01-26T23:41:47Z
Indexed on
2010/04/26
19:33 UTC
Read the original article
Hit count: 350
I'm dismayed. Ok, so this was probably the most fun perl bug I've ever found. Even today I'm learning new stuff about perl. Essentially, the flip-flop operator ..
which returns false until the left-hand-side returns true, and then true until the right-hand-side returns false keep global state (or that is what I assume.)
My question is can I reset it, (perhaps this would be a good addition to perl4-esque hardly ever used reset()
)? Or, is there no way to use this operator safely?
I also don't see this (the global context bit) documented anywhere in perldoc perlop
is this a mistake?
Code
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;
Spoiler
$ perl test.pl
first shot
foo
bar
second shot
© Stack Overflow or respective owner