use strict;
use warnings;
use Pipes;
print "hello" |
fn { ucfirst($_[0]) } |
fn { [ split('', $_[0]) ] } |
fn { [ reverse(@{$_[0]}) ] } |
fn { join('-', @{$_[0]}) } |
fn { $_[0] . "\n" };
####
package Pipes;
use strict;
use warnings;
use overload '|' => 'pipe';
require Exporter;
our @ISA = qw(Exporter);
our @EXPORT = qw(fn);
sub new {
my ($class, $sub) = @_;
bless { sub => $sub }, $class;
}
sub fn (&) {
my ($sub) = @_;
new Pipes($sub);
}
sub pipe {
my ($self, $val) = @_;
$self->{sub}->($val);
}
1;
####
perl -e 'print sub { "Hello @{[shift->()]}!\n" }->(sub{"World"})'