my $make_output = sub { my ($Registration, $Rank) = @_; return @{ $Data{$Registration}->{Name} }[$Rank], "\t"; }; print $make_output->($Registration1, $Rank1), $make_output->($Registration2, $Rank2); #### my $data = Data->new( ... ); print $data->make_output($Registration1, $Rank1), $data->make_output($Registration2, $Rank2); # class definition package Data; sub new { # set up data object # ... } sub make_output { my ($self, $Registration, $Rank) = @_; return @{ $self->{$Registration}->{Name} }[$Rank], "\t"; }