[Perl] Recevoir les infos passees via un pipe

Fermé
NaeiKinDus - 11 janv. 2006 à 12:21
blux Messages postés 25976 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 18 avril 2024 - 13 janv. 2006 à 09:44
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 25976 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 18 avril 2024 3 287
11 janv. 2006 à 15:46
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 mercredi 20 juillet 2005 Statut Membre Dernière intervention 9 janvier 2017 50
11 janv. 2006 à 17:09
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 25976 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 18 avril 2024 3 287
12 janv. 2006 à 14:51
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 jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
11 janv. 2006 à 18:57
L'exemple de blux en ligne de commande
perl -n -e 'printf "%s\n",$_' index.html
0
blux Messages postés 25976 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 18 avril 2024 3 287
12 janv. 2006 à 14:54
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 jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567 > blux Messages postés 25976 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 18 avril 2024
12 janv. 2006 à 18:26
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 25976 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 18 avril 2024 3 287 > blux Messages postés 25976 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 18 avril 2024
13 janv. 2006 à 09:44
J'avais bien compris, mais comme le message initial parlait de passer par un pipe...
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
12 janv. 2006 à 19:29
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