J'aimerais savoir comment tester l'ouverture d'un filehandle:
*FH
par exemple sans ecrire aucun use ou require dans son script.
Par exemple.
open(MONFH,"toto.txt") or die etc ..;
....
..
...
<===>
....
if (<<MONFH est ouvert>>) # <-- c'est quoi?
{
Je fait ceci...
et cela
...
}
else
{
je fait autre chôse
}
Merci de vos réponses qui seront nombreuses ,
je n'en doute pas... ;-) .
Je veut savoir : Comment tester si un Descripteur de fichier est déja ouvert
perldoc IO::Handle:
$io->opened Returns true if the object is currently a valid file descriptor, false otherwise.
-- Avant donc que d'écrire, apprenez à penser. Nicholas Boileau-Despreaux: L'Art poétique
Jedaï
serge.john.swilting wrote:
Pim wrote:
Bonjour tous,
J'aimerais savoir comment tester l'ouverture d'un filehandle: *FH par exemple sans ecrire aucun use ou require dans son script.
Par exemple.
open(MONFH,"toto.txt") or die etc ..;
la c soi open soi die le test c le die je crois
.... .. ... <===> .... if (<<MONFH est ouvert>>) # <-- c'est quoi? { Je fait ceci... et cela ... } else { je fait autre chôse }
Merci de vos réponses qui seront nombreuses , je n'en doute pas... ;-) .
J'aurai tendance à être d'accord avec serge... Ton exemple est mauvais :
dans celui-ci tu n'as pas besoin de tester le FileHandle parce que s'il ne s'est pas ouvert proprement, ton programme s'est terminé avec le die, donc ton test n'a pas de sens, il n'a un sens que si tu ne fais pas un "open or die" ! Dans ce cas, la solution de Alain doit être la plus propre. :)
-- Jedai
serge.john.swilting wrote:
Pim wrote:
Bonjour tous,
J'aimerais savoir comment tester l'ouverture d'un filehandle:
*FH
par exemple sans ecrire aucun use ou require dans son script.
Par exemple.
open(MONFH,"toto.txt") or die etc ..;
la c soi open soi die
le test c le die je crois
....
..
...
<===>
....
if (<<MONFH est ouvert>>) # <-- c'est quoi?
{
Je fait ceci...
et cela
...
}
else
{
je fait autre chôse
}
Merci de vos réponses qui seront nombreuses ,
je n'en doute pas... ;-) .
J'aurai tendance à être d'accord avec serge... Ton exemple est mauvais :
dans celui-ci tu n'as pas besoin de tester le FileHandle parce que s'il
ne s'est pas ouvert proprement, ton programme s'est terminé avec le die,
donc ton test n'a pas de sens, il n'a un sens que si tu ne fais pas un
"open or die" ! Dans ce cas, la solution de Alain doit être la plus
propre. :)
J'aimerais savoir comment tester l'ouverture d'un filehandle: *FH par exemple sans ecrire aucun use ou require dans son script.
Par exemple.
open(MONFH,"toto.txt") or die etc ..;
la c soi open soi die le test c le die je crois
.... .. ... <===> .... if (<<MONFH est ouvert>>) # <-- c'est quoi? { Je fait ceci... et cela ... } else { je fait autre chôse }
Merci de vos réponses qui seront nombreuses , je n'en doute pas... ;-) .
J'aurai tendance à être d'accord avec serge... Ton exemple est mauvais :
dans celui-ci tu n'as pas besoin de tester le FileHandle parce que s'il ne s'est pas ouvert proprement, ton programme s'est terminé avec le die, donc ton test n'a pas de sens, il n'a un sens que si tu ne fais pas un "open or die" ! Dans ce cas, la solution de Alain doit être la plus propre. :)
print $LOG "Construction de l'arbre" if defined $LOG;
if (defined $FH) { while (<$FH>) { chomp; print $_ . "n"; } }
L'avantage est que l'on obtient un scalaire et que je sait comment le manipuler. Pratique non ? Juste une question d'optimiser un peu. Et puis je suis contre l'inflation des ressources alors j'utilise un package seulement quant c'est nécessaire. Bien sur déclarer $LOG et $FH globales ou du moins à portée des routines appelantes.
Si cela peut vous être utile,
j'ai trouvé cela en final et ça correspond mieux à ce que je cherche.
Ref: Perlfaq7.pod ou .html comme on veut ( traduction française).
Ya plein d'astuces dans les faqs de perl.
#!/usr/bin/perl -w
use strict;
sub Openit {
my $name = shift;
local *FH;
return open (FH, $name) ? *FH : undef;
}
print $LOG "Construction de l'arbre" if defined $LOG;
if (defined $FH)
{
while (<$FH>)
{
chomp;
print $_ . "n";
}
}
L'avantage est que l'on obtient un scalaire et que je sait comment le
manipuler.
Pratique non ?
Juste une question d'optimiser un peu.
Et puis je suis contre l'inflation des ressources alors j'utilise
un package seulement quant c'est nécessaire.
Bien sur déclarer $LOG et $FH globales ou du moins à portée des
routines appelantes.
print $LOG "Construction de l'arbre" if defined $LOG;
if (defined $FH) { while (<$FH>) { chomp; print $_ . "n"; } }
L'avantage est que l'on obtient un scalaire et que je sait comment le manipuler. Pratique non ? Juste une question d'optimiser un peu. Et puis je suis contre l'inflation des ressources alors j'utilise un package seulement quant c'est nécessaire. Bien sur déclarer $LOG et $FH globales ou du moins à portée des routines appelantes.