如何使用perl评估变量中的内存组?

时间:2012-03-27 23:09:52

标签: regex perl eval regex-group

在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;第二个是4”(就像第二次打印一样)。

在我的示例中,只有2个特殊变量,但由于$cal$regex存储在数据库中,因此无法事先确定特殊字符数。

如何评估字符串$cal(与php中的eval一样)?

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:0)

print eval "\"$cal\"","\n";

外部dblquotes用于eval“”,内部转义引号用于print "$1 $2","\n";内插值

或者,您可以组合这样的打印片段print eval "\"$cal\n\"";