use Switch + __DATA__ = bye bye
Le
luc2
#!/usr/bin/perl
# bonjour a tous, le script suivant n'affichera rien
# pouvez-vous m'expliquer pourquoi ?
use Switch;
while( my $l = <DATA> )
{
print $l;
}
__DATA__
1
2
3
4
5
# bonjour a tous, le script suivant n'affichera rien
# pouvez-vous m'expliquer pourquoi ?
use Switch;
while( my $l = <DATA> )
{
print $l;
}
__DATA__
1
2
3
4
5

Poser une question

Le module Switch surcharge '__' (voir la doc).
Pour éviter ça, utiliser :
use Switch 'noimport';
(ce n'est pas dans la doc mais dans le code du module :-) )
HTH
J-L
--
http://www.bribes.org/perl/
Une remarque, pourquoi utiliser switch? son usage est déconseillé, car
dangereux et fragile, et à partir de perl 5.10 (qui est dispo même sur
les distros les plus conservatrices genre RedHat) il y a given/when qui
lui est sûr, sans danger et sans effets de bords merdiques.
tl,dr; ne pas utiliser switch, mais given/when.
--
Most software today is very much like an Egyptian pyramid with millions
of bricks piled on top of each other, with no structural integrity, but
just done by brute force and thousands of slaves.
Alan Kay
given/when n'est pas non plus sans problèmes.
Voici un cas de test:
use strict;
use warnings;
use 5.010;
use Test::More tests => 2;
for my $thing ('3', ' 3') {
my $test = sprintf '%d', $thing;
my $result = '';
given ($thing) {
when ('3') { $result .= "[3]"; continue; }
when (' 3') { $result .= "[ 3]"; continue; }
}
is ($result, "[$thing]", "Test [$thing]");
}
le test échoue car le smart match entre '3' et ' 3' est positif (il
devrait être négatif car '3' ne ' 3').