Как вычислить группу памяти в переменной, используя perl? - PullRequest
0 голосов
/ 28 марта 2012

В сценарии 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";
}

Я хочу напечатать: «first is 3; second is 4» (как во втором print).

В моем примере есть только две специальные переменные, но количество специальных символов не может быть определено заранее, поскольку $cal и $regex хранятся в базе данных.

Как можноЯ оцениваю строку $cal (как с eval в php)?

Ответы [ 2 ]

1 голос
/ 28 марта 2012

Похоже, вы хотите определить шаблон, в который будут вставлены ваши совпадения?Для этого вы можете использовать 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);
}
0 голосов
/ 28 марта 2012
print eval "\"$cal\"","\n";

Внешние dbl-кавычки предназначены для eval "", внутренние экранированные кавычки предназначены для интерполяции внутри print "$1 $2","\n";

, или вы можете объединить сегменты печати следующим образом print eval "\"$cal\n\"";

...