POD2-FR
view release on metacpan or search on metacpan
FR/perltrap.pod view on Meta::CPAN
elle essaye maintenant de déréfencer $x. C<$$> tout seul fonctionne
toutefois toujours bien.
$s = "a reference";
$x = *s;
print "this is $$x\n";
# perl4 affiche : this is XXXx (XXX is the current pid)
# perl5 affiche : this is a reference
=item * Le création d'une table de hachage au vol par un C<eval
"EXPR"> doit être protégée
La création de hachage à la volée par C<eval "EXPR"> exige maintenant
soit que les deux C<$> soient protégés dans la spécification du nom du
hachage, soit que les deux accolades soient protégées. Si les
accolades sont protégées, le résultat sera compatible entre perl4 et
perl5. C'est une pratique très commune qui devrait être modifiée de
façon à utiliser si possible la forme bloc d'C<eval{}>.
$hashname = "foobar";
$key = "baz";
$value = 1234;
eval "\$$hashname{'$key'} = q|$value|";
(defined($foobar{'baz'})) ? (print "Yup") : (print "Nope");
# perl4 affiche : Yup
# perl5 affiche : Nope
En changeant
eval "\$$hashname{'$key'} = q|$value|";
par
eval "\$\$hashname{'$key'} = q|$value|";
on obtient le résultat suivantE<nbsp>:
# perl4 affiche : Nope
# perl5 affiche : Yup
ou en le changeant par
eval "\$$hashname\{'$key'\} = q|$value|";
on obtient le résultat suivantE<nbsp>:
# perl4 affiche : Yup
# perl5 affiche : Yup
# et est compatible avec les deux versions
=item * Bogues des versions précédentes de perl
Certains programmes perl4 se reposaient inconsciemment sur les bugs de
versions précédentes de perl.
perl -e '$bar=q/not/; print "This is $foo{$bar} perl5"'
# perl4 affiche : This is not perl5
# perl5 affiche : This is perl5
=item * Interpolation de crochets (tableaux) et des accolades (tables de hachage)
Vous devez faire attention à l'interpolation des crochets (tableaux)
et des accolades (tables de hachage).
print "$foo["
perl 4 affiche : [
perl 5 affiche : syntax error
print "$foo{"
perl 4 affiche : {
perl 5 affiche : syntax error
Perl 5 s'attend à trouver un indice (ou une clé) après le crochet
ouvrant (ou l'accolade ouvrante) ainsi que le crochet fermant
(l'accolade fermante) correspondant. Pour retrouver le comportement de
Perl 4, vous devez protéger votre crochet (ou accolade) par le
caractère d'échappement.
print "$foo\[";
print "$foo\{";
=item * Interpolation de C<\$$foo{bar}>
De façon similaire, prenez garde à C<\$$foo{bar}>
$foo = "baz";
print "\$$foo{bar}\n";
# perl4 affiche : $baz{bar}
# perl5 affiche : $
Perl 5 cherche C<$array{bar}> qui n'existe pas, mais perl 4 est
content de simplement substituer $foo par "baz". Faites attention à
cela, en particulier dans les C<eval>'s.
=item * Une chaîne C<qq()> dans un C<eval> ne trouve pas sa fin de chaîne
Une chaîne C<qq()> passée à C<eval> pose le problème suivantE<nbsp>:
eval qq(
foreach \$y (keys %\$x\) {
\$count++;
}
);
# perl4 exécute cela sans problème
# perl5 affiche : Can't find string terminator ")"
=back
=head2 Pièges DBM
Pièges généraux de DBM.
=over 5
( run in 3.885 seconds using v1.01-cache-2.11-cpan-63c85eba8c4 )