in reply to return Both ARRAY and SCALAR

You wouldn't have gotten that behaviour if you had 'use strict'.

You're not actually overloading, what's happening is that you're assigning to an array based on the name of the variable:

sub XX{ my $x = 'one'; #scalar value push(@{$x}, 'two'); # push(@one, 'two') push(@{$x}, 'three'); # push(@one, 'three') return $x; }

Once it's in a module, '@one' is out of scope. If you really want this exact behaviour, you're likely going to need to look into a tied array that stringifies to your 'scalar' value.