Exécution d'un commande perl

montisero Messages postés 115 Statut Membre -  
[Dal] Messages postés 6122 Date d'inscription   Statut Contributeur 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 ;

1 réponse

  1. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
     
    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