Они оба являются регулярными выражениями. Вы можете прочитать о них на страницах 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
----------------------------------------------------------------------
Обновление: как отметил Микко Л. в комментариях, вам, возможно, следует реорганизовать/изменить этот фрагмент кода. Хотя он, вероятно, делает то, что должен, я считаю, что было бы неплохо сделать его более читабельным. Тот, кто написал это, очевидно, не заботился о вас как о более позднем сопровождающем. Я предлагаю вам это сделать. Вы можете изменить его на:
# 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