OVH Cloud OVH Cloud

Comment tester l'ouverture d'un Filehandle

6 réponses
Avatar
Pim
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 ..;
....
..
...
<===>
....
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... ;-) .

6 réponses

Avatar
serge.john.swilting
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... ;-) .


Avatar
Alain BARBET
Non, tu n'as pas compris ma question:


Peut-etre l'as tu mal posé ?

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

Avatar
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


Avatar
Pim
Le Mon, 14 Jul 2003 02:34:20 +0200, Alain BARBET disait ceci :
Non, tu n'as pas compris ma question:


Peut-etre l'as tu mal posé ?
Je ne pense pas.



Je veut savoir : Comment tester si un Descripteur de fichier est déja ouvert


perldoc IO::Handle:


Par contre toi tu avais mieux lu, tu aurais vu que j'ai écrit sans
use ou require.


$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




Avatar
serge.john.swilting
Pim wrote:

tu as toutes les reponses à tes questions
à toi maintenant

Le Mon, 14 Jul 2003 02:34:20 +0200, Alain BARBET disait
ceci :
Non, tu n'as pas compris ma question:


Peut-etre l'as tu mal posé ?
Je ne pense pas.



Je veut savoir : Comment tester si un Descripteur de fichier est déja
ouvert


perldoc IO::Handle:


Par contre toi tu avais mieux lu, tu aurais vu que j'ai écrit sans
use ou require.


$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






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

$FH = Openit('< /etc/motd');
$LOG = Openit(">Parser.log");


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.