GNT sans publicité, site mobile, fonctionnalitées exclusives...

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
Lire les 14 réponses

Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 3
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jean-Louis Morel
Le #23732811
Le 06/09/2011 11:02, luc2 a écrit :
#!/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



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/
luc2
Le #23733101
merci mon pote.
Emmanuel Florac
Le #23734461
Le Tue, 06 Sep 2011 09:02:37 +0000, luc2 a écrit:


use Switch;



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
luc2
Le #23735211
merci pour vos conseils
Klaus
Le #23926121
On 6 sep, 21:11, Emmanuel Florac
Le Tue, 06 Sep 2011 09:02:37 +0000, luc2 a écrit:

> use Switch;

Une remarque, pourquoi utiliser switch? son usage est déconseillé, ca r
dangereux et fragile, et à partir de perl 5.10 (qui est dispo même su r
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.



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').
Publicité
Suivre les réponses
Poster une réponse
Anonyme