“Comprimento variável não implementado”, mas não é comprimento variável
Eu tenho um regex muito louco que estou tentando diagnosticar. Também é muito longo, mas reduzi-o apenas ao script a seguir. Execute usando o Strawberry Perl v5.26.2.
use strict;
use warnings;
my $text = "M Y H A P P Y T E X T";
my $regex = '(?i)(?<!(Mon|Fri|Sun)day |August )abcd(?-i)';
if ($text =~ m/$regex/){
print "true\n";
}
else {
print "false\n";
}
Isso fornece o erro "Comprimento variável lookbehind não implementado no regex".
Espero que você possa ajudar com vários problemas:
Não vejo por que esse erro ocorreria, porque todos os possíveis valores de lookbehind têm 7 caracteres: "Segunda", "Sexta", "Domingo", "Agosto".Eu não escrevi esse regex pessoalmente e não tenho certeza de como interpretar a sintaxe.(?i)
e(?-i)
. Quando eu me livrar do(?i)
o erro realmente desaparece. Como o perl interpretará essa parte do regex? Eu acho que os dois primeiros caracteres são avaliados como "parênteses literais opcionais", exceto que os parênteses não são escapados e também nesse caso eu receberia um erro de sintaxe diferente, porque os parênteses de fechamento não seriam correspondidos.Esse comportamento começa em algum lugar entre Perl 5.16.3_64 e 5.26.1_64, pelo menos no Strawberry Perl. A versão anterior está bem com o código, a última não. Por que isso começou?