#!/usr/bin/perl

# Idiom #280 Filter map

use v5.10;

%m = ( a=>1, b=>0, c=>0, d=>1, e=>1, f=>0); 

$predicate = sub { $_[0] };  # test first arg for truth

foreach $k (keys %m) {
    delete $m{$k} if not $predicate->( $m{$k} );            
}

foreach my $k (sort keys %m) {
    say "$k => $m{$k}";
}