Perl中的$ ENV {$ variable}

时间:2019-11-05 05:29:22

标签: perl environment-variables

在Perl中是不是通过$ ENV {$ variable}扩展变量?

我在外壳程序中导出了“ a = T”和“ T = b”,并运行了Perl脚本,其中打印了“ $ ENV {$ a} \ n”,但没有打印任何内容。我想“ b”可以打印,那我应该在Perl中怎么做?

1 个答案:

答案 0 :(得分:12)

您说的那些环境变量应该被链接起来,所以

$ENV{ $ENV{a} };

注意:不是$a,而是a,例如$ENV{USER}等。它使用具有当前环境的哈希值%ENV(请参见perlvar),因此,键是环境变量的名称。


%ENV中使用Perl变量(对于shell变量的名称为)显然是令人感兴趣的,而不是上面的字符串文字。在这种情况下,我们需要以某种方式将该shell变量(其名称或值)传递给Perl程序,以便将其存储在变量中。不能直接使用它。

顺便说一句,将变量从shell传递到Perl的方法之一就是通过导出它,然后通过%ENV使它可用。但是,它也可以照常通过命令行传递。假设使用Perl单行代码(在Shell脚本中很常见),我们有两种方法可以通过

  • perl -we'...' "$var"作为自变量,在这种情况下,它在@ARGV

  • 中可用
  • 通过-s command switchperl -s -we'...' -- -shv="$var",在单行代码中设置$shv变量,值为$var--标志着参数的开始。

有关详细信息,请参见this post,有关其他示例,请参见this one

注意。一条注释询问如何传递变量的名称(字符串a)而不是其值($a)。对于我来说,这似乎不是最好的设计。如果出于某种原因需要传递变量名,则将那个存储在变量(var="a")中并如上所述传递该变量是有意义的。

但是,如果确实要传递名称本身的想法,请改用该名称,

perl -we'...' "a"
perl -we'...' -s -- -shv="a"

其余部分相同,%ENV使用分配了输入的变量。

如果使用了完整的Perl脚本(而不是单行代码),则使用Getopt::Long可以很好地处理订单。


有一则评论询问将shell变量的 name 传递给Perl变量-因此a来自OP,而不是其值$a 。我对它的效用有些不确定,但它当然是可能的。

将变量从shell传递到Perl的两种方法在传递的内容上有所不同。