И двата са регулярни изрази. Можете да прочетете за тях на perlre и perlretut. Можете да си поиграете с тях на http://www.rubular.com/r/CEtqZ3YUIi.
И двамата имплицитно правят нещо с $_
. Вероятно има while
или foreach
около вашите редове код без променлива за цикъл. В този случай $_
става тази променлива на цикъла. Може например да съдържа текущия ред на файл, който се чете.
- Ако текущата стойност на
$_
съдържа знак +
(плюс) като първи знак в началото на низа, #do somehting
.
- В противен случай, ако съдържа знак
-
(минус), #do another thing
.
В случай 1. той също замества знака +
с нищо (т.е. премахва го). Това обаче не премахва -
във 2.
Нека да разгледаме обяснение с YAPE::Regex::Explain.
use YAPE::Regex::Explain;
print YAPE::Regex::Explain->new(qr/^\+/)->explain();
Ето го. Не е много полезно в нашия случай, но все пак е хубав инструмент. Имайте предвид, че частите (?-imsx
и )
са нещата по подразбиране, които Perl предполага. Винаги са там, освен ако не ги смените.
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
----------------------------------------------------------------------
Актуализация: Както Mikko L посочи в коментарите, може би трябва да преработите/промените тази част от кода. Въпреки че вероятно прави това, което трябва, вярвам, че би било добра идея да го направите по-четлив. Който и да го е написал, очевидно не го е грижа за вас като по-късен поддържащ. Предлагам ви да го направите. Можете да го промените на:
# 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
}
person
simbabque
schedule
22.11.2012
-w
срещуwarnings
, прототипи). Може да препоръчамperldoc perlretut
. - person Joel Berger   schedule 22.11.2012