2017-07-28 51 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; 
相关问题