我可以使用.perl_env文件来设置env变量吗?

时间:2012-10-16 19:01:58

标签: perl variables

我是配置perl的新手,我正在尝试找到设置一些常见变量的最佳方法。我知道有很多方法可以做到这一点,但我想找到“最好的”;)。我在根目录中遇到了.perl_env文件,但是找不到很多文档。这是一个我可以保存变量的地方,比如BINDIR和VARDIR(我在perl脚本中使用的位置),还是有更好的方法。谢谢!

4 个答案:

答案 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中的自定义样式文件;当然那是一种宏观语言。

所有这一切,我真的不认为这是个好主意。为什么?有两个原因:

  1. 您无法看到这些变量的初始化,要记住您必须查看其他文件。
  2. 这些变量必须是真正的全局变量而不是词汇。一个人总是应该使用词汇(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}