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

Sebastien Moretti sebastien.moretti at unil.ch
Jeu 31 Mar 09:12:07 CEST 2016


> C'est pour cette raison qu'il faut vérifier que la regex a bien été
> reconnue avant d'utiliser $1.

Tu prêches un converti!

> Exécute le code qui suit pour illustration. Le premier bloc est
> incorrect car $1 conserve sa valeur tant qu'une nouvelle correspondance
> n'est pas réussie (auquel cas $1 est mis à jour).

Je pensais quand même qu'il y avait une limite, un scope, à ça.
Mais non semble-t-il.
Potentiellement très dangereux.

> # BAD
> foreach my $r_id ( qw(qsdqsdqsd_B qsdqsdqsd_A qsdqsdqsd_LR) ) {
>      $r_id =~ /_(B|LR|RL)$/;
>      print "FOUND: $1\n";
> }
>
> # GOOD
> foreach my $r_id ( qw(qsdqsdqsd_B qsdqsdqsd_A qsdqsdqsd_LR) ) {
>      if ( $r_id =~ /_(B|LR|RL)$/ ) {
>          print "FOUND: $1\n";
>      } else {
>          print "FAILED!\n"
>      }
> }

--
Sébastien Moretti



Plus d'informations sur la liste de diffusion Perl