Как проверить, есть ли в скаляре скомпилированное регулярное выражение с 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 это регулярное выражение Есть ли какая-нибудь хорошая возможность определить, есть ли в скаляре скомпилированное регулярное выражение?

Ответы на вопрос(3)

Ваш ответ на вопрос