2017-07-28 20 views
-2

I [0]、すなわち、この絶対パス含ま$行と呼ばれる、配列の要素を有する:配列の要素の値を同じ配列の別の要素に置き換えるにはどうすればよいですか?

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

を私は、3つの整合素子と、そのパスに記載されている三つの変数の各々を交換したいです同じ配列の一部です...

$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; 
関連する問題