OVH Cloud OVH Cloud

subsitution et variable

3 réponses
Avatar
William
bonjour,

est il possible de faire une substitution sur une variable ?
typiquement le code ci dessous ne marche pas si on passe par la variable
intermédiaire $line :

#!/usr/bin/perl

open FILE, ">/tmp/fichier";
print FILE "truc a la con\net bidon\n";
close FILE;

open FILE, "/tmp/fichier";
while ( $line=<FILE>) {
s/a la con/bizarre/ ;
print ;
}

--
William.

3 réponses

Avatar
dominix
William wrote:
bonjour,

est il possible de faire une substitution sur une variable ?
typiquement le code ci dessous ne marche pas si on passe par la
variable intermédiaire $line :

#!/usr/bin/perl

open FILE, ">/tmp/fichier";
print FILE "truc a la connet bidonn";
close FILE;

open FILE, "/tmp/fichier";
while ( $line=<FILE>) {
s/a la con/bizarre/ ;
print ;
}


tu as deux solutions:
soit:

while ( $line=<FILE>) {
$line =~ s/a la con/bizarre/ ;
print $line ;
}

si tu met tes lignes dans une variable, ben faut l'utiliser... la variable
soit:

while (<FILE>) {
s/a la con/bizarre/ ;
print ;
}

c'est a dire que tu laisse perl travailer avec la variable par default "$_"

--
dominix

Avatar
Alex Marandon
In article <3fac1b93$0$27568$, William wrote:
est il possible de faire une substitution sur une variable ?


Mais certainement :)

typiquement le code ci dessous ne marche pas si on passe par la variable
intermédiaire $line :

#!/usr/bin/perl

open FILE, ">/tmp/fichier";
print FILE "truc a la connet bidonn";
close FILE;

open FILE, "/tmp/fichier";
while ( $line=<FILE>) {


Ici la ligne est dans $line.

s/a la con/bizarre/ ;


Ici tu ne précise par à quoi tu appliques ta substituion. Perl considère
donc que c'est la variable par défaut $_. Laquelle n'est pas
iniatilisée. D'ailleur, en ajoutant l'option -w à perl on obtient : Use
of uninitialized value in substitution (s///) at t.pl line 10, <FILE>
line 1. Il est vivement recommandé de toujours utiliser cette option -w
qui déclenche des avertissments forts utiles.

print ;


$_ est toujours non initialisée.

Donc soit tu fais :

while (<FILE>) { # ici $_ est initialisée avec la valeur de la ligne
s/a la con/bizarre/ ;
print;
}

soit tu fais :

while ($line = <FILE>) {
$line =~ s/a la con/bizarre/;
print $line;
}

Avatar
William
open FILE, "/tmp/fichier";
while ( $line=<FILE>) {


Ici la ligne est dans $line.

s/a la con/bizarre/ ;


Ici tu ne précise par à quoi tu appliques ta substituion. Perl considère
donc que c'est la variable par défaut $_. Laquelle n'est pas
iniatilisée. D'ailleur, en ajoutant l'option -w à perl on obtient : Use
of uninitialized value in substitution (s///) at t.pl line 10, <FILE>
line 1. Il est vivement recommandé de toujours utiliser cette option -w
qui déclenche des avertissments forts utiles.


c'est pour cela que e veux faire une substitution explicitement via la
variable $line et non via $_
Je sais bien bien si je retire cette variable tout marche (c'est
d'ailleurs l'exemple donné dans le bouquin) mais je veux rendre plus
lisible à la lecture (pour moi)

while ($line = <FILE>) {
$line =~ s/a la con/bizarre/;
print $line;
}


c'est effectivement ça merci à tous les deux
:)

--
William.