Como verifico se um escalar possui um regex compilado nele com Perl?
Digamos que eu tenho uma sub-rotina / método que um usuário pode chamar para testar alguns dados que (como um exemplo) podem ser assim:
sub test_output {
my ($self, $test) = @_;
my $output = $self->long_process_to_get_data();
if ($output =~ /\Q$test/) {
$self->assert_something();
}
else {
$self->do_something_else();
}
}
Normalmente,$test
é uma string que procuramos em qualquer lugar da saída. Essa foi uma interface criada para facilitar a chamada. No entanto, descobrimos que, às vezes, uma string reta é problemática - por exemplo, um número grande e possivelmente variável de espaços ... um padrão, se você preferir. Assim, gostaria de deixá-los passar uma regex como uma opção. Eu poderia apenas fazer:
$output =~ $test
se eu pudesse assumir que é sempre uma regex, mas ah, mas a compatibilidade com versões anteriores! Se eles passarem em uma sequência, ainda será necessário testá-la como uma sequência bruta.
Então, nesse caso, precisarei testar para ver se$test
é uma regex. Existe alguma boa facilidade para detectar se um escalar possui ou não uma regex compilada?