Wie überprüfe ich, ob ein Skalar mit Perl einen kompilierten regulären Ausdruck enthält?

Nehmen wir an, ich habe eine Subroutine / Methode, die ein Benutzer aufrufen kann, um einige Daten zu testen, die (als Beispiel) wie folgt aussehen könnten:

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();
    }
}

Normalerweise,$test ist eine Zeichenfolge, nach der wir überall in der Ausgabe suchen. Dies war eine Schnittstelle, die zusammengestellt wurde, um das Aufrufen sehr einfach zu machen. Wir haben jedoch festgestellt, dass manchmal eine gerade Zeichenfolge problematisch ist - zum Beispiel eine große, möglicherweise variierende Anzahl von Leerzeichen ... ein Muster, wenn Sie so wollen. Daher möchte ich sie als Option in einer Regex übergeben. Ich könnte einfach tun:

$output =~ $test

wenn ich annehmen könnte, dass es immer ein regulärer Ausdruck ist, aber ah, aber die Abwärtskompatibilität! Wenn sie eine Zeichenfolge übergeben, muss sie dennoch wie eine rohe Zeichenfolge getestet werden.

Also in diesem Fall muss ich testen, ob$test ist ein regulärer Ausdruck. Gibt es eine gute Möglichkeit, um festzustellen, ob ein Skalar einen kompilierten regulären Ausdruck enthält oder nicht?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage