2017-12-08 10 views
-2

私はいくつかの異なるリモートホストにログインし、数値を返すコマンドを実行するPerlの簡単なforeachループを持っています。この値を変数に保存します。変数は、以下のように 、(ループスルーされている)個々のホスト名にちなんで命名されます。別の変数の内容を使って変数名を作成する

host01_backup

host02_backup

等...

をので、私の質問 - ループ内でこれを行うことは可能ですか?

foreach $i (@hosts) { 
    print "hostname is: $i \n"; 
    ssh("ins\@$i", "$cmd"); # this is where I want to assign a variable which is part named using the contents of $i (hostname). 

事前に乾杯!

答えて

2

動的に名前付きの変数を作成しないでください。彼らは彼らが価値があるとはるかにトラブルです。このために設計された配列とハッシュがあります。私はその後、私はあなたがこれはハッシュに

を示してきた慣例と命名された変数にSSH接続を介して実行するコマンドの出力を保存したい

use strict; 
use warnings; 
use v5.10; 

my @hosts = get_hosts(); 
my %hostnames = (
    host01_backup => "some value", 
    host02_backup => "some value", 
) 
foreach my $hostname (@hosts) { 
    say "hostname is: $hostname"; 
    ssh($hostnames{"host" . $hostname . "_backup"}, $cmd); 
} 

Net::SSH::Perlの概要:

use Net::SSH::Perl; 
my $ssh = Net::SSH::Perl->new($host); 
$ssh->login($user, $pass); 
my($stdout, $stderr, $exit) = $ssh->cmd($cmd); 

だから、いくつかの変数でその出力を持っています。このため

$ssh_output{$hostname} = $stdout; 
+0

ありがとう:

あなたがして(以前my %ssh_outputで作成した)ハッシュに保存することができます。初心者であることをお詫び申し上げますが、ここではハッシュの使い方を説明できますか? &変数はどのように格納されていますか? – jsjw97

+0

義務的な "シンボリックリファレンスは[悪いアイデア](https://perl.plover.com/varvarname.html)リンク – Sobrique

+0

....実際には' ssh'コマンドの構文はちょっと変わっています。 $ hostnames'ではなく '%hostnames'? – Sobrique

関連する問題