http://qs1969.pair.com?node_id=340228


in reply to creating a subroutine for accessing hash of arrays

If you want to have a subroutine apply some kind of "action" for you, to several things (internal to that subroutine), then you can use a subroutine reference. Example:
while ( (my $key, my $value) = each %partners) { if ($item eq $key) { ($partners,$email,$nickname,$realname,$postcode,$phone) = (@$v +alue); push (@allmembers, $item); my @partners_split = split / /, $partners; push (@allmembers, @partners_split); } }
Becomes:
sub do_thing { my ($partners,$item,$action) = @_; while ( (my $key, my $value) = each %$partners) { if ($item eq $key) { $action->($key,$value) } } } do_thing(\%partners,$item,sub { my ($key,$value) = @_; ($partners,$email,$nickname,$realname,$postcode,$phone) = (@$value +); push (@allmembers, $item); my @partners_split = split / /, $partners; push (@allmembers, @partners_split); }); # and then, you can do other things: do_thing(\%partners,$item,sub { my ($key,$value) = @_; # do other stuff with %partners, $item, $key, $value, etc });
That's the general idea, at least... that you would create an anonomus subref and pass it into your subroutine as one of the parameters. Think: map or grep.

On an additional note... I hope this code is just a thrown-together (not well-thought) example, as doing something like:

while ( (my $key, my $value) = each %partners) { if ($item eq $key) { ... } }
Is really just silly. You'd be much better off just doing stuff to $partners{$item}.
------------ :Wq Not an editor command: Wq