Exécution d'un commande perl

Fermé
montisero Messages postés 65 Date d'inscription jeudi 4 septembre 2014 Statut Membre Dernière intervention 18 mars 2016 - Modifié par montisero le 23/02/2015 à 13:14
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 - 23 févr. 2015 à 13:37
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 ;

1 réponse

[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié par [Dal] le 23/02/2015 à 13:38
Salut montisero,

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
print
si ce que tu veux c'est afficher le contenu de la variable
$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
0