Ma question du jour : J'ai un fichier ouvert avec : open (MON_FICHIER , ">>toto.txt");
je voudrais passer 'MON_FICHIER' en parametre a ma fonction 'traitement_fichier' : traitement_fichier (MON_FICHIER);
Dans cette fonction, bien sur, je voudrais y faire des : ????MON_FICHIER_PARAM = @_[0]; print MON_FICHIER_PARAM "coucou";
Mais je sais pas trop comment faire pour que mon exemple marche.... Une idee ?
Avec un perl recent le mieux c'est d'utiliser une variable normale au lieu du traditionel DESCRIPTEUR_DE_FICHIER
use Fatal qw(open); # "die" si open ne maarche pas open( my $df, '>>', 'toto.txt'); # open a 3 args, perl 5.8.* traitement_fichier( $df);
sub traitement_fichier( { my( $df)= @_; print {$df} "coucou"; # print $df "coucou" marche aussi mais # je trouve que {$df} se voit mieux
}
Sinon, "a-la-papa":
traitement_fichier( *MON_FICHIER); # passe la reference du GLOB
sub traitement_fichier( { my( $df)= @_; print {$df} "coucou"; # print $df "coucou" marche aussi mais # je trouve que {$df} se voit mieux
}
-- mirod
Stephane Zuckerman
Ma question du jour : J'ai un fichier ouvert avec : open (MON_FICHIER , ">>toto.txt");
pour faire simple :
open(my $mon_fichier, ">>", "toto.txt") or die "$!";
De cette manière, vous pourrez passer le handle de fichier vers n'importe quelle fonction facilement. Exemple :
### DEBUT use strict; use warnings;
open my $fh, "<", "toto.txt" or die $!; print_all($fh); close $fh or warn $!;
sub print_all { my $fh = shift; print while <$fh>; }
### FIN
je voudrais passer 'MON_FICHIER' en parametre a ma fonction 'traitement_fichier' : traitement_fichier (MON_FICHIER);
Si je ne me trompe pas, il faut passer *MON_FICHIER ...
open MON_FICHIER, "<", "toto.txt" or die $!; print_all(*MON_FICHIER); close MON_FICHIER or warn $!;
La sub ne change pas.
Dans cette fonction, bien sur, je voudrais y faire des : ????MON_FICHIER_PARAM = @_[0]; print MON_FICHIER_PARAM "coucou";
cf ma sub plus haut.
-- "Je deteste les ordinateurs : ils font toujours ce que je dis, jamais ce que je veux !" "The obvious mathematical breakthrough would be development of an easy way to factor large prime numbers." (Bill Gates, The Road Ahead)
Ma question du jour :
J'ai un fichier ouvert avec :
open (MON_FICHIER , ">>toto.txt");
pour faire simple :
open(my $mon_fichier, ">>", "toto.txt") or die "$!";
De cette manière, vous pourrez passer le handle de fichier vers n'importe
quelle fonction facilement. Exemple :
### DEBUT
use strict;
use warnings;
open my $fh, "<", "toto.txt" or die $!;
print_all($fh);
close $fh or warn $!;
sub print_all {
my $fh = shift;
print while <$fh>;
}
### FIN
je voudrais passer 'MON_FICHIER' en parametre a ma fonction
'traitement_fichier' :
traitement_fichier (MON_FICHIER);
Si je ne me trompe pas, il faut passer *MON_FICHIER ...
open MON_FICHIER, "<", "toto.txt" or die $!;
print_all(*MON_FICHIER);
close MON_FICHIER or warn $!;
La sub ne change pas.
Dans cette fonction, bien sur, je voudrais y faire des :
????MON_FICHIER_PARAM = @_[0];
print MON_FICHIER_PARAM "coucou";
cf ma sub plus haut.
--
"Je deteste les ordinateurs : ils font toujours ce que je dis, jamais ce
que je veux !"
"The obvious mathematical breakthrough would be development of an easy
way to factor large prime numbers." (Bill Gates, The Road Ahead)
Ma question du jour : J'ai un fichier ouvert avec : open (MON_FICHIER , ">>toto.txt");
pour faire simple :
open(my $mon_fichier, ">>", "toto.txt") or die "$!";
De cette manière, vous pourrez passer le handle de fichier vers n'importe quelle fonction facilement. Exemple :
### DEBUT use strict; use warnings;
open my $fh, "<", "toto.txt" or die $!; print_all($fh); close $fh or warn $!;
sub print_all { my $fh = shift; print while <$fh>; }
### FIN
je voudrais passer 'MON_FICHIER' en parametre a ma fonction 'traitement_fichier' : traitement_fichier (MON_FICHIER);
Si je ne me trompe pas, il faut passer *MON_FICHIER ...
open MON_FICHIER, "<", "toto.txt" or die $!; print_all(*MON_FICHIER); close MON_FICHIER or warn $!;
La sub ne change pas.
Dans cette fonction, bien sur, je voudrais y faire des : ????MON_FICHIER_PARAM = @_[0]; print MON_FICHIER_PARAM "coucou";
cf ma sub plus haut.
-- "Je deteste les ordinateurs : ils font toujours ce que je dis, jamais ce que je veux !" "The obvious mathematical breakthrough would be development of an easy way to factor large prime numbers." (Bill Gates, The Road Ahead)
Nicolas George
"Nanard" wrote in message :
open (MON_FICHIER , ">>toto.txt");
Utilise l'autovivification des références sur filehandles (à mes souhants :). Et par la même occasion, la forme à trois arguments d'open, et la vérification des appels système :
open my $mon_fichier, ">>", "fichier.txt" or die "fichier.txt: $!n";
Ensuite, $mon_fichier est une variable scalaire comme une autre :
traitement_fichier (MON_FICHIER);
traitement_fichier $mon_fichier;
????MON_FICHIER_PARAM = @_[0];
my ($mon_fichier_param) = @_;
Et elle s'utilise aussi comme n'importe quel filehandle (sans virgule) :
print MON_FICHIER_PARAM "coucou";
print $mon_fichier_param $coucou;
S'il est nécessaire de faire entrer les filehandles prédéfinis dans ce monde :
my $stdin = *STDIN;
"Nanard" wrote in message
<1122986113.400736.238110@g44g2000cwa.googlegroups.com>:
open (MON_FICHIER , ">>toto.txt");
Utilise l'autovivification des références sur filehandles (à mes souhants :).
Et par la même occasion, la forme à trois arguments d'open, et la
vérification des appels système :
open my $mon_fichier, ">>", "fichier.txt" or die "fichier.txt: $!n";
Ensuite, $mon_fichier est une variable scalaire comme une autre :
traitement_fichier (MON_FICHIER);
traitement_fichier $mon_fichier;
????MON_FICHIER_PARAM = @_[0];
my ($mon_fichier_param) = @_;
Et elle s'utilise aussi comme n'importe quel filehandle (sans virgule) :
print MON_FICHIER_PARAM "coucou";
print $mon_fichier_param $coucou;
S'il est nécessaire de faire entrer les filehandles prédéfinis dans ce
monde :
Utilise l'autovivification des références sur filehandles (à mes souhants :). Et par la même occasion, la forme à trois arguments d'open, et la vérification des appels système :
open my $mon_fichier, ">>", "fichier.txt" or die "fichier.txt: $!n";
Ensuite, $mon_fichier est une variable scalaire comme une autre :
traitement_fichier (MON_FICHIER);
traitement_fichier $mon_fichier;
????MON_FICHIER_PARAM = @_[0];
my ($mon_fichier_param) = @_;
Et elle s'utilise aussi comme n'importe quel filehandle (sans virgule) :
print MON_FICHIER_PARAM "coucou";
print $mon_fichier_param $coucou;
S'il est nécessaire de faire entrer les filehandles prédéfinis dans ce monde :