我试图从我在文件A.pm中定义的Perl文件中提取一些常量
package A;
use constant ERROR_ID_MAP => [
PLAYBACK_ERROR => {
defaultMessage => "Sorry there was an error with a playback",
errorCode => 0,
},
PURCHASE_ERROR => {
defaultMessage => "Sorry, we've encountered a problem with purchasing. Please try again.",
errorCode => 2123,
},
];
等等...
然后在程序包B中,我想以某种方式获取该错误文件。我的想法是使它像:
sub getErrorMap {
my ($self) = @_;
my $map = A::ERROR_ID_MAP;
# Iterate through the array / hash and get the error's default message etc.
}
但这似乎不起作用。另一种选择是使包A成为类,并可能返回常量? (在包装A中):
sub new {
my ($class, $args) = @_;
my $self;
bless($self, $class);
return $self;
}
sub getErrorConstants {
my $self = @_;
return ERROR_ID_MAP;
}
是否有一种更简单的方法来执行此操作,也许只是在ERROR_ID_MAP中获取所有数据而不会遇到此麻烦,因此我们几乎将程序包A视为某种配置文件?
注意-希望上面的代码中不会出现过多的错误,这些错误可以解决问题。
最佳答案
您应该编写一个使用 Definitions.pm
的模块Exporter
,如下所示
Definitions.pm
package Definitions;
use strict;
use warnings;
use base 'Exporter';
our @EXPORT_OK = qw/ ERROR_ID_MAP /;
use constant ERROR_ID_MAP => [
PLAYBACK_ERROR => {
defaultMessage => "Sorry there was an error with a playback",
errorCode => 0,
},
PURCHASE_ERROR => {
defaultMessage => "Sorry, we've encountered a problem with purchasing. Please try again.",
errorCode => 2123,
},
];
然后,您可以
use Definitions
并指定要在主代码中导入的常量,如下所示main.pl
use strict;
use warnings;
use Definitions qw/ ERROR_ID_MAP /;
use Data::Dump;
dd ERROR_ID_MAP;
输出
[
"PLAYBACK_ERROR",
{
defaultMessage => "Sorry there was an error with a playback",
errorCode => 0,
},
"PURCHASE_ERROR",
{
defaultMessage => "Sorry, we've encountered a problem with purchasing. Please try again.",
errorCode => 2123,
},
]
关于perl - 从Perl中的另一个文件获取常量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27388828/