我不是perl专家,我不太了解perl的所有范围规则是如何运作的。 我正在设置一个$ ENV {'whatever'}环境变量,然后我在另一个源.pl文件中调用一个函数并尝试读取该ENV条目,我什么都没收到。 Docs说ENV在当前进程和任何分叉的子进程中持续存在,但是可以访问其他源文件中可用的%ENV变量吗?
源文件是通过'require'命令包含的。这是正确的方法,还是在需要源文件时有关变量如何可用的静态(第一次)?
答案 0 :(得分:4)
%ENV
是全局的,因此可以从加载到流程中的每个源文件中的任何位置访问它。
%ENV
创建新进程时, fork
继承,但新进程会获得自己的副本,因此在其中进行的任何更改都不会在其他
如果您使用do
或require
或use
加载其他源文件,则会将其加载到同一进程中,并且会看到相同的%ENV
。
但是,如果您使用system
或exec
加载新脚本,则新脚本将加载到新进程中,并且会获得自己的%ENV
副本。
答案 1 :(得分:1)
%ENV
哈希
%ENV
包含您当前的环境。设置值 ENV会改变您随后的任何子进程的环境fork()
关闭。
require
- .pl文件与分叉命令不同。
通过Bash包装器设置必要的环境变量会更简单:
$ cat wrapper.sh
#!/bin/bash
export whatever="/usr/bin/some_dir/"; # Set to env
perl script.pl; # Invoke the script
$ cat script.pl
#!/usr/bin/perl
print $ENV{whatever}; # wrapper.sh : "/usr/bin/some_dir/"
# script.pl : ""