sub test_noproto {print shift;}; sub test_proto ($) {print shift;}; $scalar = 'A'; @array = qw /X Y Z/; %hash = ('key', 'value'); test_noproto($scalar); # gives as expected: A test_noproto(@array); # gives as expected: X test_noproto(%hash); # gives as expected: key test_proto($scalar); # gives as expected: A test_proto(@array); # gives: 3 Did you expect that? test_proto(%hash); # gives: 1/8 Did you expect that?