Skip to main content
 首页 » 编程设计

regex之将正则表达式替换作为 Perl 中的变量传递

2024年12月31日7cloudgamer

我需要将正则表达式替换作为变量传递:

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是一本关于这个主题的好书。