my @hash = (
.1 => 'url1',
.2 => 'url2',
.3 => 'url3',
.7 => 'url7',
.9 => 'url9',
);
####
#define your data:
my @hash = (
.1 => 'url1',
.2 => 'url2',
.3 => 'url3',
.7 => 'url7',
.9 => 'url9',
);
#define the fitness function / match determination
my $good_value = sub { $_ > 0.4 };
#find the keys that match the fitness function:
my @good_keys = map { $good_value->($_) } keys @hash;
#now do something with the keys:
##eg. print the values, in hash order:
for my $key (@good_keys)
{
print $hash{ $key} , "\n";
}
## grab just the urls from the good keys, without including the keys.
my @good_values = @hash{ @good_keys };
##e.g. save a hash with just the subset of new keys
my %good_hash;
@good_hash{ @good_keys } = @hash{ @good_keys };
####
my %hash = ( .1 => 'url1', .2 => 'url2', .5 => 'url5', .9 =>'url9' );
my $fitness = sub { $_ > .4 };
my @good_keys = find_good_keys( \%my_hash, $fitness );
#...
sub find_good_keys
{
my ($hashr, $fitness) = @_;
return map { $fitness->($_) keys %$hashr
}
####
sub find_good_keys
{
my ($hashr, $fitness) = @_;
return map { $fitness->($_, $hashr ) } keys %$hashr
}
####
my $fitness = sub { my ($key, $hashr ) = @_ ;
return .3 <= $key && . 7 >= $key && $hashr->{$key} =~ m/foo/i ? 1 : 0
}
my @good_keys= find_good_keys( \%hash, $fitness);
sub find_good_keys {
my ( $hashr, $fitness ) = @_;
return map { $fitness->( $key, $hashr ) } keys %$hashr;
}