package Remote; use Moose; has 'resource' => (is => 'rw', isa => 'Str'); has 'username' => (is => 'rw', isa => 'Str'); sub remote_run { my ($self, %args) = @_; my $resource = $args{'resource'} || $self->resource; my $username = $args{'username'} || $self->username; die "Missing resource variable" if (!defined($resource)); die "Missing username variable" if (!defined($username)); $self->resource($resource); # In case this is a new value. $self->username($username); # Here comes the actual code ... }