Exécution d'un commande perl
montisero
Messages postés
65
Date d'inscription
Statut
Membre
Dernière intervention
-
-
-
Bonjour ,
J'ai une chaîne de caractère et j'arrive pas à la passer comme un paramètre afin de récupérer son output. j'ai tester la commande ( echo "hello hi Jean school" | perl -pe 's/ +/,/g' ) dans le shell et j'arrive
récupérer la resultat hello,hi,jean,school mais lorsque je l'intégré dans mon script , j'obtiens un erreur de systaxe . aideee svp
Mon code est celui là
use warnings;
use strict ;
my $fich ="/root/Desktop/chaine";
my $fich1="/root/Desktop/tunis";
my $cmd= " perl -pe 's/+/,/g'|";
open F_LIRE,"$fich"
or die ("erreur");
map {chomp} @tab =<F_LIRE>;
for (my $k=0;$k < scalar(@tab);$k++)
{
$_=$tab[$k];
print "$_\n";
/// éliminer les espaces au début et à la fin de la chaîne
$_=~ s/^\s+|\s+$//g;
/// içiiiiii ///
#$chaine1=exec "$_ | perl -pe 's/+/,/g'" ;
print "chaine1\n";
}
close (F) ;
close F_LIRE ;
J'ai une chaîne de caractère et j'arrive pas à la passer comme un paramètre afin de récupérer son output. j'ai tester la commande ( echo "hello hi Jean school" | perl -pe 's/ +/,/g' ) dans le shell et j'arrive
récupérer la resultat hello,hi,jean,school mais lorsque je l'intégré dans mon script , j'obtiens un erreur de systaxe . aideee svp
Mon code est celui là
use warnings;
use strict ;
my $fich ="/root/Desktop/chaine";
my $fich1="/root/Desktop/tunis";
my $cmd= " perl -pe 's/+/,/g'|";
open F_LIRE,"$fich"
or die ("erreur");
map {chomp} @tab =<F_LIRE>;
for (my $k=0;$k < scalar(@tab);$k++)
{
$_=$tab[$k];
print "$_\n";
/// éliminer les espaces au début et à la fin de la chaîne
$_=~ s/^\s+|\s+$//g;
/// içiiiiii ///
#$chaine1=exec "$_ | perl -pe 's/+/,/g'" ;
print "chaine1\n";
}
close (F) ;
close F_LIRE ;
A voir également:
- Exécution d'un commande perl
- Invite de commande - Guide
- Commande terminal mac - Guide
- Commande dism - Guide
- Diskpart commande - Guide
- Commande scannow - Guide
1 réponse
Salut montisero,
Plusieurs problèmes dans ton code.
Si tu dois changer les espaces en virgules, ta regexp doit être
pour plus de clarté, tu peux utiliser
ensuite :
- les commentaires en Perl, c'est avec #
- le Perl exec a la syntaxe mentionnée dans Perldoc, mais est inadaptée dans ton cas car : (i) tu n'as pas à exécuter un autre processus pour quelque chose que Perl sait faire (et que tu fais déjà par ailleurs puisque ton code fait déjà des substitutions d'espaces initiaux et terminaux) ; et (ii) exec ne retourne pas (sauf si elle échoue)
- si tu utilises
- tu oublies le $ dans ton
Voilà un exemple
Dal
Plusieurs problèmes dans ton code.
Si tu dois changer les espaces en virgules, ta regexp doit être
s/ +/,/g(il y a un espace avant le +) et pas juste un +.
pour plus de clarté, tu peux utiliser
\s, qui signifie un caractère "blanc" (comme le fait, d'aileurs la regexp déjà présente dans ton code
$_=~ s/^\s+|\s+$//g;).
ensuite :
- les commentaires en Perl, c'est avec #
- le Perl exec a la syntaxe mentionnée dans Perldoc, mais est inadaptée dans ton cas car : (i) tu n'as pas à exécuter un autre processus pour quelque chose que Perl sait faire (et que tu fais déjà par ailleurs puisque ton code fait déjà des substitutions d'espaces initiaux et terminaux) ; et (ii) exec ne retourne pas (sauf si elle échoue)
- si tu utilises
use strict;tu dois déclarer tes variables avant de les utiliser, y compris
$chaine1.
- tu oublies le $ dans ton
$chaine1(au lieu de juste afficher le texte
chaine1.
Voilà un exemple
#!/usr/bin/perl use strict; use warnings; $_ = "hello hi Jean school"; my $chaine1 = $_; # commentaire $chaine1 =~ s/\s+/,/g; print "$chaine1\n";
Dal