sub instantiator { my $state = shift; if( $state eq 'scalar' ) { return sub { ... something scalarly ... } } elsif( $state eq 'array' ) { return sub { ... an array of possibilities ... } } else { # hash return sub { ... make a complete hash of things ... } } }