[Perl] Où $1 est-il capturé?

Wernerus Sebastien s.wernerus at gmail.com
Mar 29 Mar 16:37:47 CEST 2016


Cela peut effectivement venir d'une capture antérieure.

Essaye plutôt ceci:

    foreach my $r_num ( keys %{$self->{mnet}{$mnet_num}{rc}} ){
        my $r_id = $self->{rc}{$r_num}{id};
        if ($r_id =~ s/_(B|LR|RL)$//) {
            my $dir = $1;
            $buf{$r_id}{$dir} = $r_num;
        } else {
            die "Invalid ID syntax: [$r_id]\n";
        }
    }


2016-03-29 14:15 GMT+02:00 Sébastien MORETTI <sebastien.moretti at unil.ch>:

> Hello
>
> je suis en train de tester le code Perl d'un autre gars et j'ai quelques
> soucis avec $1 qui capture je ne sais trop quoi.
>
>     foreach my $r_num ( keys %{$self->{mnet}{$mnet_num}{rc}} ){
>         my $r_id = $self->{rc}{$r_num}{id};
>         $r_id =~ s/_(B|LR|RL)$//;
>         my $dir = $1;
>         die "Invalid ID syntax: [$r_id]\n"  unless $dir;
>         $buf{$r_id}{$dir} = $r_num;
>     }
>
> Auparavant la substitution $r_id =~ s/_(B|LR|RL)$//; était utile car $r_id
> se terminait par _(B|LR|RL).
> Désormais ce n'est plus le cas.
> Je m'attendais à ce que $dir soit undef mais $dir prend une valeur qui
> vient de je ne sais où. Même comportement si j'enlève la ligne de la
> substitution.
>
> Avez-vous une idée d'où $1 tire sa valeur?
> Est-ce possible que ce soit hors de la boucle?
>
> Merci
>
> Perl 5.18.2, Linux 2.6.32-504.el6.x86_64
>
> --
> Sébastien Moretti
> _______________________________________________
> Perl mailing list
> Perl at mongueurs.net
> http://listes.mongueurs.net/mailman/listinfo/perl
>
-------------- section suivante --------------
Une pièce jointe HTML a été nettoyée...
URL: <http://listes.mongueurs.net/mailman/private/perl/attachments/20160329/6a6db265/attachment-0001.html>


Plus d'informations sur la liste de diffusion Perl