【发布时间】:2010-10-07 10:11:11
【问题描述】:
我目前正在开发一个多环境 perl 脚本。众所周知,环境配置杂耍如果做得不好可能会很痛苦。由于我的 perl 脚本必须允许某些命令行参数用于配置值重载,因此我提供了以下解决方案:
package Cfg;
use strict;
use warnings;
my $gEnvironment = "DEBUG";#"PRODUCTION";
my %gConfig = (
DEBUG=>{MESSAGE=>"This is a dbg env.",URL=>"www.my-dbg-url.org"},
PRODUCTION=>{MESSAGE=>"This is a prod env.",URL=>"www.shinyprodurl.org"}
);
my $gMessage = defined $gConfig{$gEnvironment} ?
$gConfig{$gEnvironment}{MESSAGE} : die "Crappy environment";
sub Message { $gMessage = shift(@_) if (@_); $gMessage }
sub Url {
defined $gConfig{$gEnvironment} ?
$gConfig{$gEnvironment}{URL} : die "Crappy environment"
}
1;
所以,下面的脚本:
use strict;
use warnings;
use Cfg;
print Cfg::Message,"\n";
Cfg::Message("I'm a surcharged message.");
print Cfg::Message;
会产生下一个输出:
This is a dbg env.
I'm a surcharged message.
关键是我想在加载 Cfg 模块的过程中定义 $gEnvironment 的值。 这将允许我在所有环境中使用相同的配置模块。
这可能吗?
【问题讨论】: