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"})'