use strict; use warnings; sub array_func { my ($arg) = @_; if (wantarray) { return map { $arg } 1..3; } else { return map { $arg*2 } 1..5; } } sub uni_func { my ($arg) = @_; return wantarray ? array_func($arg) : scalar array_func($arg); } sub small_func { my ($arg) = @_; return array_func($arg) ; } print join(';', uni_func(7)); print "\n"; print scalar(uni_func(7)); print "\n"; print join(';', small_func(7)); print "\n"; print scalar(small_func(7)); print "\n"; print join(';', array_func(7)); print "\n"; print scalar array_func(7); print "\n"; __END__ prints: 7;7;7 5 7;7;7 5 7;7;7 5