Que signifie $ 1 en Perl? De plus, que signifie 2 $? Combien y a-t-il de variables de nombre $?
Réponses
Trop de publicités? Les variables $number
contiennent les parties de la chaîne correspondant aux groupes de capture du modèle pour votre dernière correspondance regex si la correspondance a abouti.
Par exemple, prenez la chaîne suivante:
$text = "the quick brown fox jumps over the lazy dog.";
Après la déclaration
$text =~ m/ (b.+?) /;
$1
est égal au texte " brown
".
Les variables numériques sont les correspondances du dernier opérateur de correspondance ou de substitution réussi que vous avez appliqué:
my $string = 'abcdefghi';
if( $string =~ /(abc)def(ghi)/ ) {
print "I found $1 and $2\n";
}
Vérifiez toujours que la correspondance ou la substitution a réussi avant d’utiliser $ 1, etc. Sinon, vous pourriez récupérer les restes d’une autre opération.
Les expressions rationnelles Perl sont documentées dans perlre .
$ 1, $ 2, etc. contiendront la valeur des captures de la dernière correspondance réussie - il est important de vérifier si la correspondance a réussi avant d'y accéder, c'est-à-dire
if ( $var =~ m/( )/ ) { # use $1 etc... }
Un exemple du problème - $ 1 contient 'Quick' dans les deux instructions d'impression ci-dessous:
#!/usr/bin/perl
'Quick brown fox' =~ m{ ( quick ) }ix;
print "Found: $1\n";
'Lazy dog' =~ m{ ( quick ) }ix;
print "Found: $1\n";
Comme d'autres l'ont fait remarquer, les $ x sont des variables de capture pour les expressions régulières, vous permettant de référencer des sections d'un modèle correspondant.
Perl prend également en charge les captures nommées qui peuvent être plus faciles à mémoriser dans certains cas.
entrée donnée: 111 222
/(\d+)\s+(\d+)/
1 $ est 111
2 $ est 222
On pourrait aussi dire:
/(?<myvara>\d+)\s+(?<myvarb>\d+)/
$ + {myvara} vaut 111
$ + {myvarb} vaut 222
Celles-ci s'appellent "Variables de correspondance". Comme mentionné précédemment, ils contiennent le texte de votre dernière correspondance d'expression régulière.
Plus d'informations ici: http://cslibrary.stanford.edu/108/EssentialPerl.html
(CTRL-F pour 'Match Variables' pour trouver la section correspondante)