【问题标题】:Creating variable names using the contents of another variable [duplicate]使用另一个变量的内容创建变量名[重复]
【发布时间】:2018-05-22 15:52:14
【问题描述】:

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

提前干杯!

【问题讨论】:

    标签: perl variables for-loop scripting


    【解决方案1】:

    不要创建动态命名的变量。他们的麻烦远远超过他们的价值。我们有专门为此设计的数组和哈希。

    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;
    

    【讨论】:

    • 谢谢。很抱歉成为新手 - 但你能在这里解释一下哈希的使用吗? & 变量是如何存储的?
    • 强制“符号引用是bad idea 链接
    • .... 实际上,ssh 命令的语法看起来有点奇怪。应该是$hostnames 而不是%hostnames
    • perldata 向您介绍哈希及其作用。
    • @Sobrique — 是的,错字。固定。
    猜你喜欢
    • 1970-01-01
    • 2015-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-18
    • 1970-01-01
    • 2019-07-31
    相关资源
    最近更新 更多