Ce sont les deux expressions régulières. Vous pouvez lire sur eux au perlre et perlretut. Vous pouvez jouer avec eux sur http://www.rubular.com.
Ils font tous deux implicitement quelque chose avec $_
. Il y a probablement un while
ou foreach
autour de vos lignes de code sans une variable de boucle. Dans ce cas, $_
devient cette variable de boucle. Il peut par exemple contenir la ligne en cours d'un fichier en cours de lecture.
- Si la valeur actuelle de
$_
contient un signe +
(plus) comme premier caractère au début de la chaîne, #do somehting
.
- Sinon, s'il contient un signe
-
(minus), #do another thing
.
Dans le cas 1., il remplace également le signe +
par rien (c'est-à-dire qu'il le supprime). Il ne supprime pas le -
dans 2. cependant.
Regardons une explication avec YAPE::Regex::Explain.
use YAPE::Regex::Explain;
print YAPE::Regex::Explain->new(qr/^\+/)->explain();
La voici. Pas vraiment utile dans notre cas, mais un bel outil quand même. Notez que les parties (?-imsx
et )
sont les éléments par défaut que Perl suggère. Ils sont toujours là sauf si vous les changez.
The regular expression:
(?-imsx:^\+)
matches as follows:
NODE EXPLANATION
----------------------------------------------------------------------
(?-imsx: group, but do not capture (case-sensitive)
(with^and $ matching normally) (with . not
matching \n) (matching whitespace and #
normally):
----------------------------------------------------------------------
^ the beginning of the string
----------------------------------------------------------------------
\+ '+'
----------------------------------------------------------------------
) end of grouping
----------------------------------------------------------------------
Mise à jour: Comme Mikko L dans les commentaires ont souligné, vous devriez peut-être factoriser/changer ce morceau de code. Bien qu'il fasse probablement ce qu'il est censé faire, je crois que ce serait une bonne idée de le rendre plus lisible. Celui qui l'a écrit ne se souciait évidemment pas de vous en tant que mainteneur tardif. Je vous suggère de faire. Vous pouvez le modifier en:
# look at the content of $_ (current line?)
if (s/^\+//)
{
# the line starts with a + sign,
# which we remove!
#do something
}
elsif (m/^-/)
{
# the line starts witha - sign
# we do NOT remove the - sign!
#do another thing
}
@Oded, ce lien ISN Ce n'est pas le pire tutoriel Perl que j'ai jamais vu, mais il est plutôt ancien et utilise quelques pratiques obsolètes ('-w' vs' warnings', prototypes). Je pourrais recommander ['perldoc perlretut'] (http://p3rl.org/retut). –
@JoelBerger - Ça va. C'était le premier coup de google. – Oded
@Oded, NP. La longévité des tutoriels Perl est quelque chose que la communauté essaie de combattre en faisant/en mettant en évidence de nouveaux meilleurs, et en avertissant sur les anciens/mauvais http://perl-tutorial.org/. Perl a eu une mauvaise réputation après que le boom de dot-com ait apporté beaucoup de mauvais code, nous essayons de faire un meilleur tutoriel à la fois. –