package MyTest; sub new { bless { 'session' => {} }, shift; } sub param : lvalue { my $self = shift; my $name = shift; if ( ! defined $name && wantarray ) { my @out = keys %{$self->{session}}; return @out; } $self->{session}->{$name}; } 1;