Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical
 
PerlMonks  

Re: creating a subroutine for accessing hash of arrays

by etcshadow (Priest)
on Mar 27, 2004 at 07:03 UTC ( #340228=note: print w/replies, xml ) Need Help??


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

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://340228]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others imbibing at the Monastery: (4)
As of 2023-02-06 07:11 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    I prefer not to run the latest version of Perl because:







    Results (33 votes). Check out past polls.

    Notices?