[Perl] Recevoir les infos passees via un pipe

NaeiKinDus -  
blux Messages postés 27166 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour a tous !

J'aurais aime savoir comment faire pour recuperer les informations transmises au script perl au moyen d'un pipe(je travaille sous unix).
Normalement, on recolte depuis l'entree standart, mais impossible de faire marcher ca !
Exemple de ligne de commande :
user: cat fichier | script.pl

Dans ce script, je dois recuperer les infos transmises par le cat, et les traiter !
Ca donnerait, en gros :

if (<STDIN>)
{
Instructions pour le cas ou le script est appele avec un pipe
}
else
{
Instructions pour le cas ou le script est appele directement
}

Probleme : avec ce code, le script semble attendre une ligne de commande sur l'entree standart... comment resoudre ca ?

Merci d'avance :)

4 réponses

blux Messages postés 27166 Date d'inscription   Statut Modérateur Dernière intervention   3 362
 
Salut,

#!/usr/bin/perl
while (<>) {
printf("%s\n",$_);
}


cat toto | test1.pl

Ca marche bien chez moi... (AIX 5.2)
0
hssissen Messages postés 844 Date d'inscription   Statut Membre Dernière intervention   50
 
Salut,
Pourquoi ne pas ouvrir pour lecture ton fichier carrément dans le script PERL et faire le traitement sur son contenu ensuite. Ça me parrait moins compliqué à faire!
0
blux Messages postés 27166 Date d'inscription   Statut Modérateur Dernière intervention   3 362
 
Ben voui, mais dans ce cas, il faut créer le fichier, lui donner un nom, ça prend de la place sur le disque...
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
L'exemple de blux en ligne de commande
perl -n -e 'printf "%s\n",$_' index.html
0
blux Messages postés 27166 Date d'inscription   Statut Modérateur Dernière intervention   3 362
 
Ben voui, mais tu as le nom d'un fichier, tu ne passes pas dans un pipe...
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570 > blux Messages postés 27166 Date d'inscription   Statut Modérateur Dernière intervention  
 
Salut,

tu ne passes pas dans un pipe...

je n'ai pas dit que je passe par |

C'était seulement une autre posibilité de faire la même chose que tu as fait avec |

TMTOWTDI

a+

lami20j
0
blux Messages postés 27166 Date d'inscription   Statut Modérateur Dernière intervention   3 362 > blux Messages postés 27166 Date d'inscription   Statut Modérateur Dernière intervention  
 
J'avais bien compris, mais comme le message initial parlait de passer par un pipe...
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Re blux,

voilà ta version en ligne de commande avec |
cat fichier.txt | perl -ne 'print'
mais je ne vois pas la raison en ce cas ( cat fichier.txt ça suffit), c'est seulement pour montrer le passage avec |

En revanche si on veut transformer les caractères en majuscules et stocker le résultat dans un fichier on pourra écrire
cat fichier.txt | perl -ne 'print uc' > fichier_maj.txt
0