我需要将正则表达式替换作为变量传递:
sub proc {
my $pattern = shift;
my $txt = "foo baz";
$txt =~ $pattern;
}
my $pattern = 's/foo/bar/';
proc($pattern);
这当然行不通。我尝试评估替换:
eval("$txt =~ $pattern;");
但这也不起作用。我在这里错过了什么非常明显的事情?
请您参考如下方法:
I need to pass a regex substitution as a variable
你?为什么不传递代码引用?例子:
sub modify
{
my($text, $code) = @_;
$code->($text);
return $text;
}
my $new_text = modify('foo baz', sub { $_[0] =~ s/foo/bar/ });
一般来说,当您想将“做某事的东西”传递给子例程(在您的问题中为“正则表达式替换”)时,答案是传递对一段代码的引用。 Higher Order Perl是一本关于这个主题的好书。