Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

syntaxe: and, or, blocs

2 réponses
Avatar
gvdmoort
Bonjour =E0 tous,

J'avais ceci dans un script :

rename($old, $bak)
and
print "<p class=3Ddebug>Fichier $old renomm=E9 en $bak</p>\n"
or
print "<p class=3Ddebug>can't rename $old to $bak: $!"</p>;

Je pensais na=EFvement pouvoir =E9crire

rename($old, $bak)
and {
print "<p class=3Ddebug>Fichier $old renomm=E9 en $bak</p>\n";
print "<p> Sauvegarde r=E9ussie </p>\n";
}
or
print "<p class=3Ddebug>can't rename $old to $bak: $!"</p>;

.=2E.mais =E7a ne marche pas.

Comment associer plusieurs commandes au sein d'une telle construction ?

Merci d'avance,

G=2E

2 réponses

Avatar
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>;
}


Steph.
Avatar
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.