2012-03-27 66 views
0

在perl腳本,我想在一個字符串變量來評估存儲器組特殊的變量:如何使用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)?

回答

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

外dblquotes是EVAL「 」內轉義引號是插值內print "$1 $2","\n";

或者,你可以結合打印段像這樣print eval "\"$cal\n\"";

+0

非常感謝你sln。它完美的工作! – user1296757 2012-03-28 00:04:57

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); 
} 
+0

謝謝保羅,但第二個印刷品已經這樣做。 – user1296757 2012-03-27 23:19:35

+0

我以爲那是你的問題 - 如何讓第一張照片做第二張照片。我已經編輯了我的答案,使其更清楚它是如何與您的原始相關的 - 您希望輸出遵循的「模式」在$ cal – 2012-03-27 23:21:40

+0

我瞭解您的答案,但我無法預先知道有多少特殊變量可能在$ cal中使用 – user1296757 2012-03-27 23:27:53