2017-07-28 81 views
-2

我在數組中的元素,稱爲$行[0],包含此絕對路徑名:如何用同一數組中的另一個元素替換數組元素中的值?

/home/<username>/puppet/config/files/$HOSTGROUP/$TOOLNAME/$VERSION 

我想有三個匹配元素來替換每個在該路徑中列出的三個變量的那是同一陣列的一部分...

$row[3]  (represents $HOSTGROUP) 
$row[4]  (represents $TOOLNAME) 
$row[5]  (represents $VERSION) 

我該如何在Perl腳本中做到這一點?

+2

什麼? – zdim

+1

值在數組中的事實是沒有意義的 – ikegami

回答

2
my %repl = (
    HOSTGROUP => $row[3], 
    TOOLNAME => $row[4], 
    VERSION => $row[5], 
); 

my $pat = join '|', map quotemeta, keys %repl; 
my $re = qr/\$($pat)\b/; 

$row[0] =~ s/$re/$repl{$1}/g; 

,或者你嘗試過,爲什麼它不工作

my %repl = (
    HOSTGROUP => $row[3], 
    TOOLNAME => $row[4], 
    VERSION => $row[5], 
); 

$row[0] =~ s{(\$(\w+))}{ 
    if (exists($repl{$2})) { 
     $repl{$2} 
    } else { 
     warn("Unrecognized var $2\n"); 
     $1 
    } 
}eg; 
相關問題