my %h = ( func1 => sub { return sprintf ("0x%x", shift) }, func2 => sub { return sprintf ("%b", shift) }, func3 => sub { return sprintf ("%d", shift) }, ); #### $h{func1}->(); #### my %h = ( func1 => sub { my $value = shift @_; return sprintf ("0x%x", $value) }, func2 => sub { my $value = shift @_; return sprintf ("%b", $value); }, func3 => sub { my $value = shift @_; return sprintf ("%d", $value); }, ); #### sub foo { # requires an even number of parameters in @_ my %params = @_; return; } # to call: foo(qw/key1 val1 key2 val2 key3 val3/); #### sub foo { # get singular hash reference with any number of key/value pairs my $params = shift @_; # or alternatively, my $params = $_[0] # some may want to dereference (I usually don't) my %params = %$params; return; } # to call: foo( {'key1' => 'val1', 'key2' => 'val2', 'key3' => 'val3' }); # or without braces, foo( 'key1' => 'val1', 'key2' => 'val2', 'key3' => 'val3' );