我在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).
提前干杯!
答案 0 :(得分:2)
不要创建动态命名的变量。他们的价值要大得多。我们有为此设计的数组和散列。
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);
}
的概要然后我想在一个变量中保存我在ssh连接上运行的命令的输出,该变量使用您在哈希中显示的约定命名
use Net::SSH::Perl;
my $ssh = Net::SSH::Perl->new($host);
$ssh->login($user, $pass);
my($stdout, $stderr, $exit) = $ssh->cmd($cmd);
所以你在某些变量中得到了输出。
您可以将它们存储在哈希(以前使用my %ssh_output
创建)中,并使用:
$ssh_output{$hostname} = $stdout;