我试图从我在文件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/

10-11 23:06
查看更多