in reply to Autoboxing ... "Yes We Can" ( or how I learned to love TIMTOWTDI ;)
One of the interesting features might be that chains of functions like grep could be read left to right, not right to left. The arrow does not work on lists nor arrays (it imposes scalar context, so it operates on the last member or size, respectively):
#!/usr/bin/perl use warnings; use strict; my $join = sub {join pop, @{shift()} }; my $grep = sub { my $f = pop; [ grep {$f->($_)} @{shift()} ]}; my $say = sub { print @_, "\n" }; [1 .. 120]->$grep(sub { /0/ } ) ->$grep(sub { /1/ } ) ->$join("\n") ->$say("\nIt works!");
You can also define a grep-like "method" of a regex or code ref, or make the function decide based on the type of the argument:
#!/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);
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Autoboxing ... "Yes We Can" ( or how I learned to love TIMTOWTDI )
by LanX (Saint) on Dec 13, 2013 at 21:30 UTC | |
|
Re^2: Autoboxing ... "Yes We Can" ( or how I learned to love TIMTOWTDI )
by LanX (Saint) on Dec 13, 2013 at 22:53 UTC |