molecules
комментарий в YSTH ответ :
Я не уверен, как подпрограмма has преобразуется в это замыкание, но это определенно показывает каррированную природуУ import * есть
Вот (надеюсь!) простой пример того, как этого можно достичь (однако я подозреваю, что Moose
делает это гораздо более сложным и лучшим способом!)
Meta.pm
package Meta;
sub new {
my $class = shift;
bless { @_ }, $class;
}
sub has {
my $meta = shift;
print "Given => @_ \n";
print "meta $_ => ", $meta->{$_}, "\n" for keys %$meta;
}
1;
Import.pm
package Import;
use strict;
use warnings;
use Meta;
# some arbitrary meta info!
our $Meta = Meta->new( a => 'A', b => 'B' );
sub import {
my $caller = caller;
# import 'has' into caller namespace
no strict 'refs';
*{$caller . '::has'} = sub { $Meta->has(@_) };
}
1;
meta_has.pl
use strict;
use warnings;
use Import;
has name => ( is => 'rw', isa => 'Int' );
Теперь, если вы запустите meta_has.pl
, вы получите:
# Given => name is rw isa Int
# meta a => A
# meta b => B
Надеюсь, это поможет.
/ I3az /