Genial!
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);
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.