[Israel.pm] (no subject)
Shlomi Fish
shlomif at iglu.org.il
Sun Oct 22 18:55:01 EEST 2006
I'll answer your question but first a few remarks on your style:
On Sunday 22 October 2006 12:39, Yossi Itzkovich wrote:
> Hi,
>
> Let's say I have a function :
> 1 sub filterByField
Personally I dislike studlyCaps identifier names. Underscore-separated names
are much more readable. But that's just me.
> 2 { # find in the given array of hashes(==records) , thoese who have
> hash key $fieldName that equals to $fieldValue
"those *that* have" or "those *which* have". "Who" is reserved for people.
> 3 my ($fieldName,$fieldValue,$arrOfHashes)=@_;
> 4 my @retVal=grep ({defined $$_{$fieldName} and $$_{$fieldName} eq
> $fieldValue} @$arrOfHashes);
Better use $_->{$fieldName} instead of $$_{$fieldName}. It's more readable,
and easier to understand.
> 5 }
>
> currently the call is like:
> 6 my @handle=filterByField("User Name","Moshe");
>
> It works, but it is limited, for example, for multiple conditions, or
> regex.
>
> I want to pass a code ref to that function, I will do the changed in
> filterByField, and I will send the code block in line 4 as the code ref.
>
> Question: Should $_ in the code block really getd the iterator value
> in grep for each iteration ?
>
Yes:
<<<<<<<<<<<<
#!/usr/bin/perl
use strict;
use warnings;
sub cond
{
return scalar($_ =~ /h/);
}
print join(",",
grep { cond(); }
(qw(the quick cheshire fox jumped over the lazy dog and hurdles))
), "\n";
>>>>>>>>>>>>
This prints:
<<<<<<
the,cheshire,the,hurdles
>>>>>>
The function call itself preserves the value of "$_" that was
dynamically-scoped-wise (i.e: "local" in Perl) set in grep. Of course it
would be better and safer to pass the value explictly and shift it out of the
callback call.
Regards,
Shlomi Fish
---------------------------------------------------------------------
Shlomi Fish shlomif at iglu.org.il
Homepage: http://www.shlomifish.org/
Chuck Norris wrote a complete Perl 6 implementation in a day but then
destroyed all evidence with his bare hands, so no one will know his secrets.
More information about the Perl
mailing list