Как проверить, есть ли в скаляре скомпилированное регулярное выражение с Perl?
Допустим, у меня есть подпрограмма / метод, который пользователь может вызвать для проверки некоторых данных, которые (в качестве примера) могут выглядеть следующим образом:
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();
}
}
Обычно,$test
это строка, которую мы ищем в любом месте вывода. Это был интерфейс, созданный для упрощения вызова. Однако мы обнаружили, что иногда прямая строка проблематична - например, большое, возможно, различное количество пробелов ... шаблон, если хотите. Таким образом, я хотел бы позволить им передать регулярное выражение в качестве опции. Я мог бы просто сделать:
$output =~ $test
если бы я мог предположить, что это всегда регулярное выражение, но ах, но обратная совместимость! Если они передают строку, она все равно должна проверить ее как необработанную строку.
Так что в этом случае мне нужно проверить, если$test
это регулярное выражение Есть ли какая-нибудь хорошая возможность определить, есть ли в скаляре скомпилированное регулярное выражение?