Je suis consterné. OK, donc c'était probablement le plus amusantPerl bug que j'ai jamais trouvé. Même aujourd'hui, j'apprends de nouvelles choses sur Perl. Essentiellement, l'opérateur bascule ..
qui retourne faux jusqu'au retour de la main côté gauche vrai, puis vrai jusqu'à ce que la droite côté retourne faux garder état global (ou qui est ce que je supposons.)Est-ce que l'opérateur de flip-flop de Perl est buggé? Il a un état global, comment puis-je le réinitialiser?
Puis-je le réinitialiser (peut-être ce serait un bon ajout à Perl 4-esque presque jamais utilisé reset()
)? Ou, n'y a-t-il aucun moyen d'utiliser cet opérateur en toute sécurité?
Je ne vois pas non plus cela (le bit de contexte global) documenté nulle part dans perldoc perlop
est-ce une erreur?
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
Bonne question! On dirait qu'il agit comme une fermeture. – Demosthenex
Oh j'ai rencontré ceci - j'ai écrit une fonction en utilisant le flipflop, appelé deux fois et la deuxième fois il avait conservé l'état de la première. a cassé mon application! –
Wow, je n'ai même jamais su que 'reset' existait. ++ juste pour ça. :) – friedo