#!/usr/bin/perl -w use strict; some_sub(1,2); #called too early warning error #but note that the code still runs! sub some_sub($$) #this sub requires 2 scalars { my ($a,$b) = @_; print "$a,$b\n"; } some_sub 6,8; #ok,now this is just fine some_sub 10,11,12; #too many argument error __END__ main::some_sub() called too early to check prototype at C:\TEMP\perl33.pl line 6. 1,2 if you reverse order or add proto above call: sub some_sub($$); some_sub(1,2); sub some_sub($$) { my ($a,$b) = @_; print "$a,$b\n"; } Perl will be happy, but to what effect?