print grep /test/, "mytestphrase";

使用grep语法,您可以传递不带引号的正则表达式。
我希望子例程具有相同的行为,如下所示:
use strict;
use warnings;

sub testsub {
    my $regex = shift;
    my $phrase = shift;

    print grep $regex, $phrase;
}

testsub /test/, "mytestphrase";

但是它尝试在testsub调用之前针对我的正则表达式评估$_,并发出以下错误:
Use of uninitialized value $_ in pattern match (m//) at ./a.pl line 14.

是否可以像grep命令一样调用testsub,必须如何修改子例程以支持它?

最佳答案

像这样传递参数:

testsub qr/test/, "mytestphrase";

$regex的使用率也更改为/$regex/:
#!/usr/bin/perl

use strict;
use warnings;

sub testsub {
    my $regex = shift;
    my $phrase = shift;
    print grep /$regex/, $phrase;
}

testsub qr/test/, "mytestphrase";

10-04 18:34