for Ex : package test1 ; my %hash = ( a=> 10,b => 30 ) ; 1; in Script : use test1 ; print %hash ; # How to make this avilable in script without sub
解决方法
良好的编程习惯规定您不允许外部代码直接混淆模块的数据,而是必须通过中介,例如访问器例程.
@H_403_14@
TIMTOWTDI,有和没有出口. Moose示例看起来很长,但是这个示例还允许设置数据,而不是仅仅从Test1读取数据,其他三个示例需要相当多的额外代码来处理这种情况.@H_403_14@
unsugared@H_403_14@
模@H_403_14@
@H_403_14@
package Test1; { my %hash = (a => 10,b => 30); sub member_data { return %hash; } } 1;
程序@H_403_14@
@H_403_14@
use Test1 qw(); Test1::member_data; # returns (a => 10,b => 30)
驼鹿@H_403_14@
模@H_403_14@
@H_403_14@
package Test1; use Moose; has 'member_data' => (is => 'rw',isa => 'HashRef',default => sub { return {a => 10,b => 30}; }); 1;
程序@H_403_14@
@H_403_14@
use Test1 qw(); Test1->new->member_data; # returns {a => 10,b => 30} # can also set/write data! ->member_data(\%something_new)
子::出口商@H_403_14@
模@H_403_14@
@H_403_14@
package Test1; use Sub::Exporter -setup => { exports => [ qw(member_data) ] }; { my %hash = (a => 10,b => 30); sub member_data { return %hash; } } 1;
程序@H_403_14@
@H_403_14@
use Test1 qw(member_data); member_data; # returns (a => 10,b => 30)
出口商@H_403_14@
模@H_403_14@
@H_403_14@
package Test1; use parent 'Exporter'; our @EXPORT_OK = qw(member_data); { my %hash = (a => 10,b => 30)