sub get_args { if ((scalar(@_) == 1) && ref($_[0]) eq 'HASH') { print "got named args!\n"; } else { print "got positional args\n"; } } sub named_or_positional { get_args(@_); } named_or_positional({foo => 'avalue' , bar => ['a', 'b']}); named_or_positional('whatever' , 'we', 'are', 'passing');