use strict; use warnings; my @diffarray = qw(test info path); sub new { return bless {}; } sub run { my $self = shift; foreach my $element (@diffarray) { my $member = "do_$element"; if ($self->can($member)) { $self->{$element} = $self->$member (); } else { print "Unhandled mode $element\n"; } } } sub do_test { return 'test'; } sub do_info { return 'info'; } sub do_path { return 'path'; } my $test = new (); $test->run (); print join "\n", map {"$_: " . $test->{$_}} sort keys %$test;