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
|