What is Perl doing with this argument to push in this case?
I just saw some code in our code base (and it's OLD c开发者_如何学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.
This is a dubious "feature" of perl, deprecated behaviour; it should be an error, but it works.
If you turn on the warnings of the compiler (perl -W, highly recommended), it warns:
Array @aa missing the @ in argument 1 of push() at xx.pl line 2.
Nicholas Clark explains:
That's Perl 1 syntax.
精彩评论