I just saw some code in our code base (and it’s OLD code, as in Perl 3 or Perl 4 days) that looks like this (I’m simplifying greatly):
@array;
push( array, $some_scalar );
Notice that the array in the push() doesn’t have an @. I would assume that the code behind push knows that the first argument is supposed to be array so grabs the array from the array typeglob. Is that more or less it? If Perl is able to do that without problem, why would you need to include the @ at all?
This is an old ‘feature’ of the parser. The @ isn’t mandatory in a push if the variable is a package variable. This is considered by many as a bug that ought to be fixed though. You really shouldn’t be doing this.