use Params::Validate qw(validate_pos validate SCALAR ARRAYREF HASHREF); use Contextual::Return; #### use Params::Validate qw( validate_pos validate ); use Contextual::Return; # and later in the args to validate I could do: sub fun { my $self = shift; my $args = validate( @_, { fun => Params::Validate::ARRAYREF } ); return LIST { @{ $args{fun} } } ARRAYREF { $args{fun} } SCALAR { $#{$args{fun}} } DEFAULT { croak "illegal context" } } #### use Params::Validate qw( validate_pos validate SCALAR ARRAYREF HASHREF ); use Contextual::Return qw(); # later, in a subroutine # this don't work! sub funner { return Contextual::Return::LIST { qw/Larry Curly Moe/ } Contextual::Return::ARRAYREF { [ qw/Larry Curly Moe/ ] } Contextual::Return::DEFAULT { croak "listy type contexts only" } ; }