#!/usr/bin/perl use warnings; use strict; use feature qw{ say }; my $grep = sub { my $f = shift; return { CODE => sub { grep $f->($_), @_ }, Regexp => sub { grep /$f/, @_ }, q() => sub { grep $_ <= $f, @_ }, }->{ref $f}->(@_); }; say for qr/[01]/->$grep(1 .. 100); say '-' x 20; say for sub { not $_ % 10 }->$grep(1 .. 100); say '-' x 20; say for 5->$grep(1 .. 100);