Here's some code that seems to turn up more and more frequently: package Useful::Function; use Moose; has 'args' => ( is => 'ro', isa => 'ArrayRef[Str]', required => 1, auto_deref => 1, ); sub function { my $self = shift; my @args = $self->args; return ...; } Then it's used like this: my $useful_function = Useful::Function->new( args => [1,2,3] ); my $result = $useful_function->function(); ... I t