Согласно perlretut
... в скалярном контексте $time =~ /(\d\d):(\d\d):(\d\d)/
возвращает значение true или false.В контексте списка, однако, он возвращает список совпадающих значений ($1,$2,$3)
.
Но я не могу найти объяснение того, что возвращается в контексте списка, если шаблон соответствует, когда нет захватагруппы в регулярном выражении.Тестирование показывает, что это список (1)
(один элемент, целое число 1).(Вспомогательный вопрос - всегда ли это будет, где это определено?)
Это затрудняет выполнение того, что я хочу:
if (my @captures = ($input =~ $regexp)) {
furtherProcessing(@captures);
}
Я хочу, чтобы furtherProcessing
вызывался, еслиесть совпадение с любыми захваченными группами, переданными в качестве аргументов.Проблема возникает, когда $regexp
не содержит групп захвата, потому что тогда я хочу, чтобы furtherProcessing
вызывался без аргументов, а не со значением 1
, как это происходит выше.Я не могу проверить (1)
как особый случай, например
if (my @captures = ($input =~ $regexp)) {
shift @captures if $captures[0] == 1;
furtherProcessing(@captures);
}
, потому что в случае
$input = 'a value:1';
$regexp = qr/value:(\S+)/;
в @captures
есть захваченное значение, которое происходитвыглядеть так же, как и я, когда $regexp
совпадает, но не имеет групп захвата.
Есть ли способ сделать то, что я хочу?