在perl中为许多脚本和模块定义常量

时间:2011-10-08 13:21:25

标签: perl coding-style constants

我遇到以下问题: 我正在开发一个由许多模块和脚本组成的perl项目。该项目必须在两台不同的机器上运行。

在整个项目中,我调用外部程序,但两台机器上的路径不同,所以我想为所有文件全局定义一次,然后在切换机器时才更改此定义。

由于我是perl的新手,我想问一下,实现这一目标的常用方法是什么。 我应该使用“use define”或全局变量还是别的什么?

提前致谢!

3 个答案:

答案 0 :(得分:1)

如果我是你,我绝对会尽力避免全局变量 - 它们是编码风格较弱的标志(用任何语言)并为你提供维护地狱。

相反,您可以创建和使用配置文件 - 每台机器一个。在Perl上,您可以选择免费使用CPAN模块:

还有很多其他的

答案 1 :(得分:1)

为什么不使用子程序查找有效的可执行文件,而不是定义可能有效或无效的全局变量?

my $program = program_finder();
sub program_finder {
    -x && return $_ for qw( /bin/perl /usr/bin/perl /usr/local/bin/perl );
    die "Could not find a perl executable";
}

答案 2 :(得分:0)

创建一个模块来保存配置信息。

在perl库路径中的文件My/Config.pm中:

package My::Config;
use warnings;
use strict;
use Carp ();

my %setup = (
   one => {path => '/some/path'},
   two => {path => '/other/path'},
);

my $config = $setup{ $ENV{MYCONFIG} }
     or Carp::croak "environment variable MYCONFIG must be set to one of: "
              .(join ' ' => keys %setup)."\n";

sub AUTOLOAD {
    my ($key) = our $AUTOLOAD =~ /([^:]+)$/;
    exists $$config{$key} or Carp::croak "no config for '$key'";
    $$config{$key}
}

然后在你的文件中:

use My::Config;

my $path = My::Config->path;

当然,在您的计算机上,将环境变量MYCONFIG设置为%setup中的一个键。