�ɲɾ�����ӯ�����һ��ˣ��������С���˴��ͣ�������P���ҹ��ñ˽��ά�Բ��������˸߸ԣ�������ơ��ҹ��ñ�����ά�Բ���ˡ���˳^�ӣ������ӡ� ���ͯj�ӣ��ƺ���ӣ� ? PNG ?%k25u25%fgd5n!? PNG ?%k25u25%fgd5n!? PNG ?%k25u25%fgd5n!? PNG ?%k25u25%fgd5n!s_e.pm000064400000001402152537152750005661 0ustar00#!/usr/bin/perl package Test::SubExporter::s_e; use strict; use warnings; use Sub::Exporter; Sub::Exporter::setup_exporter({ exports => { xyzzy => undef, hello_sailor => \&_hs_gen, hi_sailor => \"_hs_gen", }, groups => { default => [ qw(xyzzy hello_sailor) ], sailor => [ xyzzy => undef, hello_sailor => { -as => 'hs_works', game => 'zork3' }, hello_sailor => { -as => 'hs_fails', game => 'zork1' }, ] }, collectors => [ 'defaults' ], }); sub xyzzy { return "Nothing happens." }; sub _hs_gen { my ($class, $name, $arg, $collection) = @_; if (($arg->{game}||'') eq 'zork3') { return sub { return "Something happens!" }; } else { return sub { return "Nothing happens yet." }; } } "y2"; ObjGen.pm000064400000001744152537152750006270 0ustar00#!/usr/bin/perl package Test::SubExporter::ObjGen::Obj; use strict; use warnings; sub new { my $class = shift; my $code = $class->can(shift); bless { code => $code } => $class; } sub group { return { foo => sub { return 'FOO' }, bar => sub { return 'BAR' }, }; } sub baz { return sub { return 'BAZ'; }; } use overload '&{}' => sub { $_[0]->{code} }, 'bool' => sub { 1 }; package Test::SubExporter::ObjGen; my ($group_o, $group_b, $baz, $quux); BEGIN { $quux = sub { sub { 'QUUX' } }; bless $quux => 'Test::SubExporter::Whatever'; $group_o = sub { return { ringo => sub { 'starr' }, richard => sub { 'starkey' }, } }; bless $group_o => 'Test::SubExporter::Whatever'; $baz = Test::SubExporter::ObjGen::Obj->new('baz'); $group_b = Test::SubExporter::ObjGen::Obj->new('group'); } use Sub::Exporter -setup => { exports => { baz => $baz, quux => $quux }, groups => { meta => $group_b, ringo => $group_o }, }; "call me"; DashSetup.pm000064400000001321152537152750007013 0ustar00#!/usr/bin/perl package Test::SubExporter::DashSetup; use strict; use warnings; use Sub::Exporter -setup => { exports => { xyzzy => undef, hello_sailor => \&_hs_gen, }, groups => { default => [ qw(xyzzy hello_sailor) ], sailor => [ xyzzy => undef, hello_sailor => { -as => 'hs_works', game => 'zork3' }, hello_sailor => { -as => 'hs_fails', game => 'zork1' }, ] }, collectors => [ 'defaults' ], }; sub xyzzy { return "Nothing happens." }; sub _hs_gen { my ($class, $name, $arg, $collection) = @_; if (($arg->{game}||'') eq 'zork3') { return sub { return "Something happens!" }; } else { return sub { return "Nothing happens yet." }; } } "y2"; GroupGen.pm000064400000002070152537152750006643 0ustar00#!/usr/bin/perl package Test::SubExporter::GroupGen; use strict; use warnings; use Sub::Exporter; my $alfa = sub { 'alfa' }; my $bravo = sub { 'bravo' }; my $returner = sub { my ($class, $group, $arg, $collection) = @_; my %given = ( class => $class, group => $group, arg => $arg, collection => $collection, ); return { foo => sub { return { name => 'foo', %given }; }, bar => sub { return { name => 'bar', %given }; }, }; }; sub gen_group_by_name { my ($class, $group, $arg, $collection) = @_; my %given = ( class => $class, group => $group, arg => $arg, collection => $collection, ); return { baz => sub { return { name => 'baz', %given }; }, }; } my $config = { exports => [ ], groups => { alphabet => sub { { a => $alfa, b => $bravo } }, generated => $returner, # symbolic => \&gen_group_by_name, # symbolic => sub { shift->gen_group_by_name(@_) }, symbolic => \'gen_group_by_name', }, collectors => [ 'col1' ], }; Sub::Exporter::setup_exporter($config); "gg"; Faux.pm000064400000003237152537152750006026 0ustar00 use strict; use warnings; package Test::SubExporter::Faux; use base qw(Exporter); our @EXPORT = qw(faux_installer exports_ok everything_ok); sub faux_installer { my ($verbose) = @_; $verbose = 1; my @exported; my $reset = sub { @exported = () }; my $generator = sub { my ($arg) = @_; # my ($class, $name, $generator) = @$arg{qw(class name generator)}; return $arg; }; my $installer = sub { my ($arg, $to_export) = @_; for (my $i = 0; $i < @$to_export; $i += 2) { my ($as, $gen_arg) = @$to_export[ $i, $i+1 ]; # my ($class, $generator, $name, $arg, $collection, $as, $into) = @_; my $everything = { class => $gen_arg->{class}, generator => $gen_arg->{generator}, name => $gen_arg->{name}, arg => $gen_arg->{arg}, collection => $gen_arg->{col}, as => $as, into => $arg->{into}, }; push @exported, [ $gen_arg->{name}, ($verbose ? $everything : $gen_arg->{arg}), ]; } }; return ($generator, $installer, $reset, \@exported); } sub exports_ok { my ($got, $expected, $comment) = @_; my $got_simple = [ map { [ $_->[0], $_->[1]{arg} ] } @$got ]; my @g = sort { ($a->[0] cmp $b->[0]) || ($a->[1] <=> $b->[1]) } @$got_simple; my @e = sort { ($a->[0] cmp $b->[0]) || ($a->[1] <=> $b->[1]) } @$expected; main::is_deeply(\@e, \@g, $comment); } sub everything_ok { my ($got, $expected, $comment) = @_; my @g = sort { ($a->[0] cmp $b->[0]) || ($a->[1] <=> $b->[1]) } @$got; my @e = sort { ($a->[0] cmp $b->[0]) || ($a->[1] <=> $b->[1]) } @$expected; main::is_deeply(\@e, \@g, $comment); } 1; GroupGenSubclass.pm000064400000000617152537152750010350 0ustar00use strict; use warnings; package Test::SubExporter::GroupGenSubclass; use base qw(Test::SubExporter::GroupGen); sub gen_group_by_name { my ($class, $group, $arg, $collection) = @_; my %given = ( class => $class, group => $group, arg => $arg, collection => $collection, ); return { baz => sub { return { name => 'baz-sc', %given }; }, }; } "power overwhelming";