Higher-Order Perl P.333-334

android - acrobat reader

# vim:set ts=2:
use strict;
use warnings;
use YAML;

sub cmap (&) {
  my $f = shift;
  my $r = sub {
    my @result;
    for (@_) {
      push @result, $f->($_);
    }
    @result;
  };
  return $r;
}

sub cgrep(&) {
  my $f = shift;
  my $r = sub {
    my @result;
    for (@_) {
      push @result, $_ if $f->($_);
    }
    @result;
  };
  return $r;
}

sub weblog {
  return (
    +{referer => "slashdot.jp" },
    +{referer => "slashdot.com" },
    +{referer => "google.jp"   },
    +{referer => "yahoo.jp"    },
    +{referer => "hatena.ne.jp"},
  );
}

my $double = cmap { $_ * 2 };
my @aa = $double->(1..5);
print "\@aa=@aa\n";

my $find_slashdot = cgrep { $_->{referer} =~ /slashdot/i };
my @bb = $find_slashdot->(weblog());
print "\@bb=\n";
print Dump \@bb;

__END__
@aa=2 4 6 8 10
@bb=
---
- referer: slashdot.jp
- referer: slashdot.com