1

Perlは..を許可します

$a = "fee";
$result = 1 + f($a) ; # invokes f with the argument $a

しかし、許可しない、またはむしろ私が望むことをしません...

s/((fee)|(fie)|(foe)|(foo))/f($1)/ ; # does not invoke f with the argument $1

望ましい最終結果は、正規表現が一致したものに連動した置換を実行する方法です。

私は書く必要がありますか

sub lala {
  my $haha = shift;
  return $haha . $haha;
}
my $a = "the giant says foe" ;
$a =~ m/((fee)|(fie)|(foe)|(foo))/;
my $result = lala($1);
$a =~ s/$1/$result/;
print "$a\n";
4

1 に答える 1

12

perldocperlopを参照してください。e交換部品が評価されるように、修飾子を指定する必要があります。

#!/usr/bin/perl

use strict; use warnings;

my $x = "the giant says foe" ;
$x =~ s/(f(?:ee|ie|o[eo]))/lala($1)/e;

print "$x\n";

sub lala {
    my ($haha) = @_;
    return "$haha$haha";
}

出力:

C:\ Temp> r
巨人は敵を言う

ちなみに、ブロックはstrict専用の特別なパッケージスコープ変数であるため、ブロックの使用$aやブロック$bの外側は避けてください。sort

于 2010-04-01T00:30:44.520 に答える