perl - 是否可以将参数传递给 Perl 模块加载?

标签 perl module

我目前正在开发一个多环境 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 的值。 这将使我能够在所有环境中使用相同的配置模块。

这可能吗?

最佳答案

我相信自定义导入方法就是您所追求的:

package Cfg;

our $gMessage;

sub import {
    my ($package, $msg) = @_;
    $gMessage = $msg;
}

以及其他地方:

use Cfg "some message";

import 是当您使用某些模块时 perl 会调用的内容。请参阅perldoc -f use了解详情。

关于perl - 是否可以将参数传递给 Perl 模块加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3880616/

相关文章:

javascript - 抓取动态表单 WWW::Mechanize Perl

perl - 无法连接到 api-ssl.bitly.com :443

mysql - Windows 上正确的 "chmod"Perl 模块文件是什么?

plugins - Joomla 中组件、模块、扩展和插件之间的区别

powershell - 尝试导入模块时故意使模块失败

python - 想要连接到 dynamoDB,得到 AttributeError : 'module' object has no attribute 'connect_to_region'

algorithm - perl递归查询

perl - 用于 Perl Web 开发的 ASP 样式标签?

java - 强制 .java 编译为 .class

magento - magento 订单流程中的错误