You seem to be getting different results than
mdillon. That's the problem with relying on undocumented details. If you write a sub starting with
my ($a,$b,$c,$d)=@_; and then calculate defaults if undef or use the undef value for some special meaning, then leaving off args
naturally gives the same results. But if you write
if (scalar(@_) < 4) ... to do something different, then using undef doesn't give the same effect.