我是配置perl的新手,我正在尝试找到设置一些常见变量的最佳方法。我知道有很多方法可以做到这一点,但我想找到“最好的”;)。我在根目录中遇到了.perl_env文件,但是找不到很多文档。这是一个我可以保存变量的地方,比如BINDIR和VARDIR(我在perl脚本中使用的位置),还是有更好的方法。谢谢!
答案 0 :(得分:2)
嗯,我从来没有听说过.perl_env
,而且它不在文档中:
$ perldoc perlrun | grep .perl_env || echo "not found"
not found
但是,无论如何,我们试一试。
$ echo '$ENV{FOO}="BAR";' >~/.perl_env
$ FOO=BAZ perl -E'say $ENV{FOO}'
BAZ
不,不行。
答案 1 :(得分:2)
和其他人一样,我从来没有听说过.perl_env
文件。另外我假设你想要设置Perl全局变量,因为如果你的意思是设置系统全局变量(环境变量),你应该在Bash脚本中这样做。
无论如何,如果你真的想这样做,我会创建一个名为MyGlobalVariables.pm
的文件并将其放在PERL5LIB目录中。
package MyGlobalVariables;
use strict;
use warnings;
use parent 'Exporter';
our @EXPORT = qw/$SomeVar/;
our $SomeVar = 'Some Value';
请记住,每个变量都必须添加到@EXPORT
数组中。
然后在你的脚本中你可以写use MyGlobalVariables;
并且瞧,他们就在那里。这种机制很像LaTeX中的自定义样式文件;当然那是一种宏观语言。
所有这一切,我真的不认为这是个好主意。为什么?有两个原因:
my
而不是our
),除非有真正的理由这样做。答案 2 :(得分:1)
如果要处理配置文件以在脚本之间共享变量,请参阅以下示例:
INPUT文件:
$ cat /tmp/config
[name1]
val1=foobar
val2=qux
[name2]
val1=10
val2=100
Perl代码:
$ perl -we '
use Data::Dumper;
use Config::IniFiles;
my $ini = new Config::IniFiles(
-file => "/tmp/config", -allowcontinue => 1
);
print Dumper $ini->{"myparms"};
'
输出:
$VAR1 = {
'name2' => [
'val1',
'val2'
],
'name1' => [
'val1',
'val2'
]
};
如果您需要shell
变量来共享,例如使用bash
:
$ echo "export MYVAR=foobar" >> ~/.bashrc
$ . !$
$ perl -le 'use Env qw/MYVAR/; print $MYVAR;'
答案 3 :(得分:1)
对于像这样的全局变量,我将它们设置在环境中(我使用Windows,但显然你可以在Unix中做同样的事情)。在Perl中,环境存储在%ENV
变量(系统的一部分)中。您可以将您的BINDIR称为$ENV{BINDIR}
。