PERL 5.20 un local implicite avec «if» ?

Bonjour,

Voila le problème:tout se passe comme si j’avais «localisé» la variable multiligne à l’intérieur de la boucle while.

Bien entendu, mon but est d’utiliser le contenu de cette variable (pour éditer un fichier), au delà de la boucle. Mais ce problème est bien embarrassant.

[code]my $multiligne
while (<$fichier>){
if (/\ADescription\s*:/…/\AFindescription/){
$multiligne=$_;
( traitements sur $multiligne)

$multiligne #affiche les lignes

} # Fin de if

$multiligne # n’affiche plus rien, à chaque cycle

} # Fin de while

$multiligne # n’affiche plus rien ![/code]

[EDIT]
En réalité c’est dans la fonction if que la variable semble être localisée, comme la 2e trace ### $multiligne le montre.
Je change le titre avec while, par avec if

Merci pour votre intérêt

La nuit portant conseil, la solution est bêtement simple:

Ce n’est pas le bassin qui est séparé de la rivière, mais le pécheur qui rejette le poisson à l’eau !
Autrement dit, la capture du poisson $_ dans l’épuisette $multiligne est perdue à chaque while. Chaque poisson est remplacé par le poisson suivant. Il fallait garder cette valeur dans un tableau (accumuler et non remplacer)

push @leslignes, $multiligne;

Soit:

[code]my $multiligne
my @leslignes;
while (<$fichier>){
if (/\ADescription\s*:/…/\AFindescription/){
$multiligne=$_;
( traitements sur $multiligne)
push @leslignes, $multiligne; # ===> On empile le résultat dans un tableau <===

$multiligne #affiche les lignes

} # Fin de if

$multiligne # n’affiche plus rien, à chaque cycle

@leslignes # ===> affiche sans erreur <===

} # Fin de while

$multiligne # n’affiche plus rien ![/code]