0

perl スクリプトで、文字列変数のメモリ グループ特殊変数を評価したい:

my $string="3-4";
my $cal='first is $1;second is $2';
my $regex='^(.)-(.)$';

if($string=~ $regex){
    print $cal;
        #print "first is $1;second is $2";
}

印刷したい:「最初は3;2番目は4」(2番目の印刷のように)。

私のサンプルでは、​​特殊変数は 2 つしかありませんが、データベースに格納されているため$cal、特殊文字の数を事前に決定することはできません。$regex

文字列を評価するにはどうすればよい$calですか (php の eval のように) ?

4

2 に答える 2

1

一致が挿入されるパターンを定義したいようですね。そのためにprintfを使用できます。

my $string="3-4";
my $cal="%s %s\n";
if($string=~ '^(.)-(.)$'){
    printf($cal, $1, $2);
}

単純にすべてのマッチを結合したいが、いくつあるかわからない場合は、次のようにしてみてください。

my @matches=$string=~ '^(.)-(.)$';
if (scalar(@matches))
{
    print join(' ',@matches);
}
于 2012-03-27T23:13:11.593 に答える
0
print eval "\"$cal\"","\n";

外側の dblquotes は eval "" 用で、内側のエスケープされた引用符は内部の補間用ですprint "$1 $2","\n";

または、このように印刷セグメントを組み合わせることができますprint eval "\"$cal\n\"";

于 2012-03-27T23:45:22.953 に答える