Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is Perl doing with this argument to push in this case?

Tags:

perl

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?

like image 606
Morinar Avatar asked Mar 30 '10 19:03

Morinar


3 Answers

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.

like image 58
Leon Timmermans Avatar answered Sep 18 '22 15:09

Leon Timmermans


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.
like image 20
leonbloy Avatar answered Sep 21 '22 15:09

leonbloy


Nicholas Clark explains:

That's Perl 1 syntax.
like image 37
daxim Avatar answered Sep 17 '22 15:09

daxim