我遇到以下问题: 我正在开发一个由许多模块和脚本组成的perl项目。该项目必须在两台不同的机器上运行。
在整个项目中,我调用外部程序,但两台机器上的路径不同,所以我想为所有文件全局定义一次,然后在切换机器时才更改此定义。
由于我是perl的新手,我想问一下,实现这一目标的常用方法是什么。 我应该使用“use define”或全局变量还是别的什么?
提前致谢!
答案 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
中的一个键。