La fonction rename($old, $bak) renvoi 1 en cas de reussite et 0 en cas d'echec.
Perl lance la fonction rename, si le resultat est 0, il n'essaie meme pas d'evaluer ce qu'il y a apres le and car 0 AND x => 0 par contr il evalue ce qu'il y a apres le OR (donc le print ko) Si le resultat est de rename est 1 il evalue ce qu'il y a apres le AND (donc le print ok) et pas apres le OR.
Tu peux l'ecrire de facon plus comprehensible comme ca :
if ( rename($old, $bak) ) { print "<p classÞbug>Fichier $old renommé en $bak</p>n" print "<p classÞbug>can't rename $old to $bak: $!"</p>; } else { print "<p classÞbug>can't rename $old to $bak: $!"</p>; }
Steph.
La fonction rename($old, $bak) renvoi 1 en cas de reussite et 0 en cas
d'echec.
Perl lance la fonction rename, si le resultat est 0, il n'essaie meme
pas d'evaluer ce qu'il y a apres le and car 0 AND x => 0 par contr il
evalue ce qu'il y a apres le OR (donc le print ko)
Si le resultat est de rename est 1 il evalue ce qu'il y a apres le AND
(donc le print ok) et pas apres le OR.
Tu peux l'ecrire de facon plus comprehensible comme ca :
if ( rename($old, $bak) )
{
print "<p classÞbug>Fichier $old renommé en $bak</p>n"
print "<p classÞbug>can't rename $old to $bak: $!"</p>;
}
else
{
print "<p classÞbug>can't rename $old to $bak: $!"</p>;
}
La fonction rename($old, $bak) renvoi 1 en cas de reussite et 0 en cas d'echec.
Perl lance la fonction rename, si le resultat est 0, il n'essaie meme pas d'evaluer ce qu'il y a apres le and car 0 AND x => 0 par contr il evalue ce qu'il y a apres le OR (donc le print ko) Si le resultat est de rename est 1 il evalue ce qu'il y a apres le AND (donc le print ok) et pas apres le OR.
Tu peux l'ecrire de facon plus comprehensible comme ca :
if ( rename($old, $bak) ) { print "<p classÞbug>Fichier $old renommé en $bak</p>n" print "<p classÞbug>can't rename $old to $bak: $!"</p>; } else { print "<p classÞbug>can't rename $old to $bak: $!"</p>; }
Steph.
tuser
wrote:
Bonjour à tous,
J'avais ceci dans un script :
rename($old, $bak) and print "<p classÞbug>Fichier $old renommé en $bak</p>n" or print "<p classÞbug>can't rename $old to $bak: $!"</p>;
Je pensais naïvement pouvoir écrire
rename($old, $bak) and { print "<p classÞbug>Fichier $old renommé en $bak</p>n"; print "<p> Sauvegarde réussie </p>n"; } or print "<p classÞbug>can't rename $old to $bak: $!"</p>;
il faut déplacer le </p> à l'intérieur du print "..."
...mais ça ne marche pas. Comment associer plusieurs commandes au sein d'une telle construction ?
pour le bloc des opérations qui suit le "and", il faut utiliser la fonction do { ... } voir http://perl.enstimac.fr/DocFr/perlfunc.html#item_do
voici le programme corrigé:
use strict; use warnings;
my $old = 'old.txt'; my $bak = 'bak.txt';
rename($old, $bak) and do { print "<p classÞbug>Fichier $old renommé en $bak</p>n"; print "<p> Sauvegarde réussie </p>n"; } or print "<p classÞbug>can't rename $old to $bak: $!</p>";
Dans ce programme particlier, l'utilisation des opérateurs "and" et "or" me semble logique, mais en général il ne faut pas oublier que le "and" est prioritaire par rapport au "or" voir http://perl.enstimac.fr/DocFr/perlop.html
Sinon, on va avoir des surprises.
gvdmoort@skynet.be wrote:
Bonjour à tous,
J'avais ceci dans un script :
rename($old, $bak)
and
print "<p class=debug>Fichier $old renommé en $bak</p>n"
or
print "<p class=debug>can't rename $old to $bak: $!"</p>;
Je pensais naïvement pouvoir écrire
rename($old, $bak)
and {
print "<p class=debug>Fichier $old renommé en $bak</p>n";
print "<p> Sauvegarde réussie </p>n";
}
or
print "<p class=debug>can't rename $old to $bak: $!"</p>;
il faut déplacer le </p> à l'intérieur du print "..."
...mais ça ne marche pas.
Comment associer plusieurs commandes au sein d'une telle construction ?
pour le bloc des opérations qui suit le "and", il faut utiliser la
fonction do { ... }
voir http://perl.enstimac.fr/DocFr/perlfunc.html#item_do
voici le programme corrigé:
use strict;
use warnings;
my $old = 'old.txt';
my $bak = 'bak.txt';
rename($old, $bak)
and do {
print "<p class=debug>Fichier $old renommé en $bak</p>n";
print "<p> Sauvegarde réussie </p>n";
}
or
print "<p class=debug>can't rename $old to $bak: $!</p>";
Dans ce programme particlier, l'utilisation des opérateurs "and" et
"or" me semble logique, mais en général il ne faut pas oublier que le
"and" est prioritaire par rapport au "or"
voir http://perl.enstimac.fr/DocFr/perlop.html
rename($old, $bak) and print "<p classÞbug>Fichier $old renommé en $bak</p>n" or print "<p classÞbug>can't rename $old to $bak: $!"</p>;
Je pensais naïvement pouvoir écrire
rename($old, $bak) and { print "<p classÞbug>Fichier $old renommé en $bak</p>n"; print "<p> Sauvegarde réussie </p>n"; } or print "<p classÞbug>can't rename $old to $bak: $!"</p>;
il faut déplacer le </p> à l'intérieur du print "..."
...mais ça ne marche pas. Comment associer plusieurs commandes au sein d'une telle construction ?
pour le bloc des opérations qui suit le "and", il faut utiliser la fonction do { ... } voir http://perl.enstimac.fr/DocFr/perlfunc.html#item_do
voici le programme corrigé:
use strict; use warnings;
my $old = 'old.txt'; my $bak = 'bak.txt';
rename($old, $bak) and do { print "<p classÞbug>Fichier $old renommé en $bak</p>n"; print "<p> Sauvegarde réussie </p>n"; } or print "<p classÞbug>can't rename $old to $bak: $!</p>";
Dans ce programme particlier, l'utilisation des opérateurs "and" et "or" me semble logique, mais en général il ne faut pas oublier que le "and" est prioritaire par rapport au "or" voir http://perl.enstimac.fr/DocFr/perlop.html