Хорошо, чтобы не навсегда это сохранить, вот решение на основе модулей для вас:
Foo.pm:
package Foo;
use strict;
use warnings;
BEGIN {
require Exporter;
our @ISA = qw( Exporter );
our @EXPORT_OK = qw( get_person get_address get_all );
our $VERSION = '0.01';
}
my %person = (
firstname => {
__type => 'String',
},
lastname => {
__type => 'String',
},
);
my %address = (
address => {
street => {
__type => 'String',
},
unit => {
__type => 'String',
},
suburb => {
__type => 'String',
},
__type => 'HASH',
},
);
sub get_person
{
return \%person;
}
sub get_address
{
return \%address;
}
sub get_all
{
return( { %person, %address } );
}
1;
__END__
bar.pl:
#!/usr/bin/perl
use Data::Dumper;
use strict;
use warnings;
use lib '.';
use Foo qw( get_person get_address get_all );
my $junk = get_all();
print Dumper $junk;
Но на самом деле , ради вашего программиста по обслуживанию (часто вы сами через 6 месяцев), используйте JSON или YAML (или быстрее YAML :: XS ), так что данные могут поддерживаться в виде простого текстового файла, а не серии вложенных ссылок на данные, замаскированные под код.
Цитировать Perl Best Practices (не уверен, изначально ли это был Дамиан):
Всегда пишите код, как будто парень, который в конечном итоге будет поддерживать ваш код, будет жестоким психопатом, который знает, где вы живете.
РЕДАКТИРОВАТЬ : Для полноты вот эквивалентное решение с использованием YAML (из CPAN):
data.yml:
---
firstname:
__type: String
lastname:
__type: String
address:
__type: HASH
street:
__type: String
suburb:
__type: String
unit:
__type: String
baz.pl:
#!/usr/bin/perl
use YAML qw( Load Dump LoadFile DumpFile );
use Data::Dumper;
use strict;
use warnings;
my $data = LoadFile( 'data.yml' );
print Dumper $data;