0

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

4

4 回答 4

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

不,不起作用。

于 2012-10-16T19:06:28.620 回答
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
于 2012-10-17T04:35:01.517 回答
1

如果要处理配置文件以在脚本之间共享变量,请参见以下示例:

输入文件

$ 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;'
于 2012-10-16T19:13:27.783 回答
1

对于像这样的全局变量,我将它们设置在环境中(我使用 Windows,但显然你可以在 Unix 中做同样的事情)。在 Perl 中,环境存储在%ENV变量(系统的一部分)中。您可以将 BINDIR 称为$ENV{BINDIR}.

于 2012-10-17T03:24:01.983 回答