使用另一个变量

时间:2017-12-08 11:41:18

标签: perl variables for-loop scripting

我在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).

提前干杯!

1 个答案:

答案 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连接上运行的命令的输出,该变量使用您在哈希中显示的约定命名

这是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);

所以你在某些变量中得到了输出。

您可以将它们存储在哈希(以前使用my %ssh_output创建)中,并使用:

$ssh_output{$hostname} = $stdout;