package SomeTestPackage2; use strict; use warnings; use Data::Dumper; use constant IVARS => qw[$none $href $aref $non_empty_aref]; BEGIN { use base qw[SomeAttributes2]; __PACKAGE__->import( IVARS ); } use constant custom_aref => q{ confess( '!!!package!!! !!!ivar!!! must be an array ref' ) if 'ARRAY' ne ref !!!ivar!!!; }; sub self_sub : Method( qw/ $none :none $href :href $aref custom_aref $non_empty_aref :non_empty_aref / ) { # return ( ref $self, ref $href, ref $aref, scalar @{ $non_empty_aref } ); } 1; #### #!/usr/bin/perl use strict; use warnings; use Test::More qw[no_plan]; use SomeTestPackage2; do { # Successfull call to self_sub my( $test1 ) = bless( {}, 'SomeTestPackage2' ); my( @self_sub ) = $test1->self_sub( 'hi', { }, [ ], [ 1 ] ); ok( $self_sub[0] eq 'SomeTestPackage2', 'ref $self' ); ok( $self_sub[1] eq 'HASH', 'ref $href' ); ok( $self_sub[2] eq 'ARRAY', 'ref $aref' ); ok( $self_sub[3] > 0, 'non empty array' ); }; #### $ perl test2.pl ok 1 - ref $self ok 2 - ref $href ok 3 - ref $aref ok 4 - non empty array 1..4 #### sub { local *__ANON__='SomeTestPackage2::self_sub'; my( $self, $none, $href, $aref, $non_empty_aref ) = @_; confess( 'SomeTestPackage2::self_sub $non_empty_aref needs a non-empty array reference' ) if 'ARRAY' ne ref $non_empty_aref or not @{ $non_empty_aref }; confess( 'SomeTestPackage2 $aref must be an array ref' ) if 'ARRAY' ne ref $aref; confess( 'SomeTestPackage2::self_sub $href needs a hash reference' ) if 'HASH' ne ref $href; confess( 'SomeTestPackage2::self_sub needs a SomeTestPackage2 reference' ) if ref $self ne 'SomeTestPackage2'; package SomeTestPackage2; use warnings; use strict 'refs'; return ref $self, ref $href, ref $aref, scalar @{$non_empty_aref;}; }