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";