Использование Exporter хорошо для небольших проектов, но если у вас много кода, обрабатывающего данные, которые являются внутренними для модуля, все может стать ... грязным.Объектная ориентация намного удобнее для такого типа вещей.
Почему бы не создать метод для извлечения этих данных?На самом деле, почему бы просто не использовать Moose?
В вашем Example.pm просто загрузить Moose - это дает вам бесплатный конструктор и деструктор, а также подпрограмму для извлечения значений и по умолчанию включен строгий и т. д.Ссылки на массивы должны быть объявлены немного по-другому из-за того, что Class: MOP (движок под рогами Moose) инициализирует атрибуты - вы должны заключить его в ссылку на код (aka sub {}).Вы также должны использовать Data :: Dumper в скрипте, который вызывает пакет, вместо самого пакета.
Example.pm
package Example;
use Moose;
has 'exported_array' => (is => 'rw', default => sub { [ 'one', 'two', 'three' ] });
1;
Затем вызовите это из скрипта:
example.pl
#!/usr/bin/env perl
use Modern::Perl '2013';
use lib '.';
use Example;
use Data::Dumper;
my $example = Example->new;
my $imported_array_ref = $example->exported_array;
my @imported_array = @{$imported_array_ref};
foreach my $element(@imported_array) { say $element; }
say Dumper(\@imported_array);
Я сделал разыменование действительно явным в приведенном выше сценарии example.pl ... это может быть гораздо более кратко, если разыменовать его непосредственно в массиве:
#!/usr/bin/env perl
use Modern::Perl '2013';
use lib '.';
use Example;
use Data::Dumper;
my $example = Example->new;
my @imported_array = @{$example->exported_array};
foreach my $element(@imported_array) { say $element; }
say Dumper(\@imported_array);
Я думаю, что много больше программистов на Perl приняли бы Moose, если бы было больше простых примеров, показывающих, как сделать простые вещи.
Официальное руководство по лосям отлично, но оно действительно написано для тех, кто уже знаком с ООП.