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

2 petites questions de base

4 réponses
Avatar
ctobini
Bonjour,

J'aurais 2 petites questions :

1=2E je n'arrive pas =E0 retrouver dans mes notes comment effectuer un
print 'WYSIWYG' lorsque le contenu =E0 =E9crire est tr=E8s long c'est =E0
dire sans avoir =E0 taper les caract=E8res de retour par exemple
(l'=E9quivalent de print """ """ en Python, je pr=E9f=E8re Perl =E0 Python
pour la pr=E9cision :) )

2=2E J'essaie d'effectuer quelque chose comme :

my $file_out =3D $ARGV[0] if defined $ARGV[0];

open OUT, defined $file_out ? ">$file_out" : STDOUT

Dans ce cas, il y a une erreur sur les r=E9f=E9rences vu que j'utilise le
pragma strict, mais je ne sais pas si on peut (et comment) utiliser un
filehandle pour STDOUT.

En vous remerciant,

C=2E Tobini

4 réponses

Avatar
Paul Gaborit
À (at) 19 May 2006 01:14:57 -0700,
"ctobini" écrivait (wrote):
J'aurais 2 petites questions :

1. je n'arrive pas à retrouver dans mes notes comment effectuer un
print 'WYSIWYG' lorsque le contenu à écrire est très long c'est à
dire sans avoir à taper les caractères de retour par exemple
(l'équivalent de print """ """ en Python, je préfère Perl à Python
pour la précision :) )


Si mes quelques souvenirs de Python sont corrects, vous cherchez un
truc du genre :

print << 'FINSTR';
blah blah blah blah...
blah blah blah blah...
FINSTR

Les quotes autour de FINSTR indique qu'on ne veut pas interpoler
d'éventuelles variables dans le contenu. Si vous souhaitez interpoler
le contenu, il faut utiliser les guillements (c'est comme pour les
chaînes) :

print << "FINSTR";
blah blah $var1 blah blah...
blah blah $var2 blah blah...
FINSTR


2. J'essaie d'effectuer quelque chose comme :

my $file_out = $ARGV[0] if defined $ARGV[0];

open OUT, defined $file_out ? ">$file_out" : STDOUT


open my $out, (defined $ARGV[0] ? ">$ARGV[0]", ">&STDOUT")
or die "Can't open '$out': $!n";

Ou pour être plus propre (plus sûr) :

my $out;
if (defined $ARV[0]) {
open $out, ">", $ARGV[0]
or die "Can't open '$ARGV[0]' : $!n";
} else {
open $out, ">&STDOUT"
or die "Can't dup STDOUT: $!n";
}

Ensuite :

print $out "Affichage sur $out...n";

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/&gt;
Perl en français - <http://perl.enstimac.fr/&gt;

Avatar
Nicolas George
Paul Gaborit wrote in message :
open $out, ">&STDOUT"
or die "Can't dup STDOUT: $!n";


Ou éventuellement :

$out = *STDOUT;

Les deux ont une sémantique légèrement différente ; je soupçonne que celle
de ma version est plus proche de ce que l'on veut en général.

Avatar
Paul Gaborit
À (at) Fri, 19 May 2006 10:17:19 +0000 (UTC),
Nicolas George <nicolas$ écrivait (wrote):
Paul Gaborit wrote in message :
open $out, ">&STDOUT"
or die "Can't dup STDOUT: $!n";


Ou éventuellement :

$out = *STDOUT;

Les deux ont une sémantique légèrement différente ; je soupçonne que celle
de ma version est plus proche de ce que l'on veut en général.


Oui. Dans le premier cas, un 'close' sur $out ne fermera pas STDOUT
alors que dans le deuxième cas, STDOUT sera aussi fermé. Autre effet :
dans le premier cas, on peut changer les couches d'encodage de $out
sans toucher à celles de STDOUT. En fait, dans le deuxième cas, $out
devient un alias du FileHandle STDOUT alors que dans le premier cas,
on a deux FileHandles différents qui envoient vers la même sortie. Le
premier cas peut-être utile lorsqu'on veut rediriger STDOUT vers autre
chose tout en conservant la possibilité d'écrire vers la sortie
orginale (via $out).

Quant à ce qu'"on" veut en général... AMHA, c'est impossible à
déterminer : "on" étant par définition indéterminé ;-)

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/&gt;
Perl en français - <http://perl.enstimac.fr/&gt;


Avatar
ctobini
Bonjour, merci à tous pour vos réponses et désolé de vous répondre
tardivement.

C'est parfait, j'ai pu avec vos indications scripter rapidement ce que
je voulais faire, et retrouver les différents chapitres se rapportant
au 'filehandles' dans mon bouquin sur Perl (les pages concernées
n'étaient pas au chapitre 'filhandles' :) )

Merci encore et bonne journée à tous.

C. Tobini