Bonjour à tous, je cherche un équivalent perl à la fonction php file_get_contents. Je désire en fait placer tout le contenu d'un fichier dans une variable.
Merci pour votre aide...
Bonjour à tous, je cherche un équivalent perl à la fonction php file_get_contents. Je désire en fait placer tout le contenu d'un fichier dans une variable.
Merci pour votre aide...
Envoyé par remixade
Et pour en faire une fonction:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 open(my $fd, '<', 'foo.txt'); my @lines = <$fd>; close($fd); my $lines = join('', @lines); print $lines;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 sub get_file_content { my ($filename) = @_; open(my $fd, '<', $filename) or die("Impossible d'ouvrir $filename: $!\n"); my @lines = <$fd>; close($fd); return join('', @lines); }
Surtout pas ! Tu lis ligne par ligne, pour ensuite jeter tous tes efforts par la fenêtre ? Sur un gros fichier tu le sentiras passer...Envoyé par GnuVince
L'idiôme courant serait plutôt :
Et la fonction correspondante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 open my($fd), '<', 'foo.txt' or die "$!\n"; my $content = do { local $/; <$fd> };
Pour avoir encore plus rapide et pratique, File::Slurp du CPAN pourrait être intéressant.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 sub slurp { my $filename = shift; open my($fd), '<', 'foo.txt' or die "$!\n"; local $/; <$fd>; }
--
Jedaï
Je viens de consulter "Perl Best Practices" et Jedaï a raison. La section en question est 10.9. Il est à noter que dans la section suivante, 10.10, Damian Conway nous dit d'utiliser le module Perl6::Slurp.
Jedaï: tu peux m'expliquer pourquoi on utilise local plutôt que my? Je sais que local a un scope dynamique et que my a un scope lexical, mais je vois pas ce que ça changerait dans notre cas.
Merci
Bonjour à tous,
Tout d'abord merci à vous pour ces réponses pleines de connaissances...
J'ai essayé les 2 solutions et le résultat est tout à fait ce que je voulais, j'utiliserai malgré tout la 2eme solution puisque Jedai parle d'un avantage certain pour un gros fichier et c'est mon cas...
Ok, précision importanteEnvoyé par remixade
![]()
Parce que sinon, la soluce de GnuVince fait bien son office sur des fichiers pas trop gros et est fréquemment usitée donc...
Essaie avec my et tu verras le problème... $/ est une variable globale réservée, tu ne peux pas utiliser de my dessus, seulement la localiser.Envoyé par GnuVince
Oui bien sûr, sauf que la différence est vraiment énorme entre les deux solutions au niveau vitesse. Alors sur les petits fichiers on ne la ressent pas vraiment, mais il arrive que les fichiers grossissent...Parce que sinon, la soluce de GnuVince fait bien son office sur des fichiers pas trop gros et est fréquemment usitée donc...![]()
--
Jedaï
Ah merci. J'ai fait des tests hier en utilisant mes propres variables et il n'y avait pas de différence. C'est bon à savoir.Envoyé par Jedai
Partager