perl中的环境变量

CJ7*_*CJ7 6 perl environment-variables

我似乎只能通过以下方式访问perl中的环境变量:

use Env;
print ${PATH};
Run Code Online (Sandbox Code Playgroud)

这是预期的行为吗?

信封文档说,你需要做的$ENV{PATH}.

小智 8

使用$ENV是perl中预定义的变量格式

print $ENV{PATH};
Run Code Online (Sandbox Code Playgroud)


zdi*_*dim 8

信封说:

Perl将环境变量保存在一个名为的特殊哈希中%ENV.对于此访问方法不方便时,Perl模块Env允许将环境变量视为标量或数组变量.

所以,是的,这是合法的和预期的使用变量是$PATH,$USER,$HOME,等.

但是,这个模块

默认情况下,它将所有现有环境变量(keys %ENV)绑定到标量.

我更喜欢直接使用%ENV哈希,而不是它的Env-ed对应物.


Dav*_*man 6

是的,由于两个因素的相互作用,这是预期的行为:

  1. 您使用了Env别名$ENV{PATH}$PATH.

请注意,$ENV{PATH}它在 Perl 中始终可用。 use Env只需为 的内容添加别名%ENV,不需要使其%ENV可用:

$ perl -E 'say $ENV{LANG}'
en_US.UTF-8
Run Code Online (Sandbox Code Playgroud)
  1. ${PATH}无非是一种更冗长的说法$PATH。该${...}构建体(和它的表兄弟,@{...}%{...})是最常用于插双引号字符串中,强制Perl来认识的全部内容{...}作为变量名,而不是一个较短的名称后面的文字文本,但语法也可以在其他情况下使用。

一个简单的演示:

$ perl -E '$foo = "bar"; say ${foo}'
bar
Run Code Online (Sandbox Code Playgroud)