You might remember that map, sort and grep can be chained and they always accept and return lists...
Hm. Passing a listified hash (mixed keys and values in random order) to any of those constructs is a completely pointless exercise.
That is after all, why you are having to define an hgrep yourself.
Better methinks to pass hgrep and hmap a reference to the hash, call the callback with pairs, and have them return a list.
At least then they serve a purpose:
#! perl -slw
use strict;
use Data::Dump qw[ pp ];
sub hgrep (&\%) {
my( $code, $href ) = @_;
map{
local @_;
$code->( @_ = each %$href ) ? @_ : ()
} 1 .. keys %$href;
}
sub hmap (&\%) {
my( $code, $href ) = @_;
map{
local @_;
$code->( @_ = each %$href )
} 1 .. keys %$href;
}
my %h = 'a'..'z';
print join ' ', hgrep{ $_[0] =~ /[a-m]/ } %h;
print join ' ', hmap{ "$_[0] => $_[1]" } %h;
my %orig = (
cat => 22,
dog => 23,
category => 66,
catalyst => 77,
cataclysm => 88,
dogma => 89,
dogstar => 92,
);
my %h2 = hgrep{ $_[0] =~ /^cat/ } %orig;
pp\%h2;
__END__
C:\test>hfp
e f a b m n c d k l g h i j
w => x e => f a => b m => n s => t y => z u => v c => d k => l q => r
+g => h i => j o => p
{ cat => 22, cataclysm => 88, catalyst => 77, category => 66 }
hsort is left as an exercise.
With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.
-
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.