my $result = $obj->processor_1->processor_2($argument)->processor_3; #### #!/usr/bin/perl use List::Util qw(min max); use Data::Dumper; my $ary = [12,3,4,5,7,15,8]; my $obj = bless [ $ary, {} ], __PACKAGE__; sub count { $_[0]->[1]->{count} = @{$_[0]->[0]}; $_[0]; } sub min_max { $_[0]->[1]->{min} = min @{$_[0]->[0]}; $_[0]->[1]->{max} = max @{$_[0]->[0]}; $_[0]; } sub esrever { $_[0]->[1]->{esrever} = [ reverse @{$_[0]->[0]} ]; $_[0]; } sub sort_inline { @{$_[0]->[0]} = sort {$a<=>$b} @{$_[0]->[0]}; $_[0]; } sub append_stuff_inline { $_ .= $_[1] for @{$_[0]->[0]}; $_[0]; } my $result = $obj->min_max->append_stuff_inline(".foo")->count->esrever->sort_inline; print Dumper($result); __END__ $VAR1 = bless( [ [ '3.foo', '4.foo', '5.foo', '7.foo', '8.foo', '12.foo', '15.foo' ], { 'min' => 3, 'max' => 15, 'esrever' => [ '8.foo', '15.foo', '7.foo', '5.foo', '4.foo', '3.foo', '12.foo' ], 'count' => 7 } ], 'main' ); #### my @chain = qw(min_max count sort_inline esrever); my ($result) = map { $obj->$_ } @chain;