package Bloodnok; sub new { bless {}, shift } sub call { my ( $self, $position ) = @_; my $wa = wantarray; if ( $wa ) { print "$position: list\n"; } elsif ( defined $wa ) { print "$position: scalar\n"; } else { print "$position: void\n"; } return $self; } package main; my $yo_sup_b = Bloodnok->new(); $yo_sup_b->call( 'void start' ) ->call( 'void mid' ) ->call( 'void end' ); scalar $yo_sup_b->call( 'scalar start' ) ->call( 'scalar mid' ) ->call( 'scalar end' ); () = $yo_sup_b->call( 'list start' ) ->call( 'list mid' ) ->call( 'list end' ); __END__ void start: scalar void mid: scalar void end: void scalar start: scalar scalar mid: scalar scalar end: scalar list start: scalar list mid: scalar list end: list