В регулярном выражении Perl документация говорит
... в скалярном контексте
$time =~ /(\d\d):(\d\d):(\d\d)/
возвращает истинное или ложное значение. Однако в контексте списка он возвращает список совпадающих значений($1,$2,$3)
Но как получается, что когда вы предоставляете альтернативный вариант — когда совпадений не найдено — ИСТИНА или ЛОЖЬ будут назначены даже в контексте списка?
В качестве примера я хочу присвоить совпадающую группу переменной и, если она не найдена, использовать строковое значение ALL.
my ($var) = $string =~ /myregex/ || 'ALL';
Это возможно? А как насчет нескольких захваченных групп? Например.
my ($var1, $var2) = $string =~ /(d.t)[^d]+(d.t)/ || 'dit', 'dat';
Где, если первая группа не соответствует, используется 'dit'
, а если совпадения для второй не найдено, 'dat'
.
if
else
и использование$1
и$2
, вероятно, будет более читабельным - person Recct   schedule 25.02.2016||
они находятся в пустом контексте, если все слева ложно, даже если вы используете более слабоеor
, предположительно применяемое в случае сбоя регулярного выражения, справа ничего не происходит. - person Recct   schedule 25.02.2016