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
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.