http://www.perlmonks.org?node_id=177807


in reply to Accessing Arrays and Lists

Welcome to the pain that prototypes can bring... ;-)
that would be a different pia that is encountered with print occasionally, thanks to danger for the heads up

Your problem here is that

print (stat($file))[8];
looks to perl just like
print( stat($file) ) [8];
its treating the outer pair of parenthesis as the parenthesis for the print function call, and not as get the stat results in list context and only use the 9th element

This will work just fine in either of the following ways (and proabably a few more)

print((stat($file))[8]);
or even better (er IMO)
print "".(stat($file))[8];
or also (since stat returns a number)
print 0+(stat($file))[8];
and as danger points out below the best would probably be
print +(stat($file))[8];
HTH

Updated Node

Yves / DeMerphq
---
Writing a good benchmark isnt as easy as it might look.

Replies are listed 'Best First'.
Re: Re: Accessing Arrays and Lists
by danger (Priest) on Jun 27, 2002 at 18:50 UTC

    Just to clarify. Parens immediately after a function are taken as delimiters for the argument list (as you rightly explained) --- but that has nothing to do with Perl's prototypes:

    sub foo { # no prototype here return ('a','b','c'); } # print (foo)[0]; # same error print +(foo)[0];

    I also show the unary + op as a better generalization of your last example --- it disambiguates without imposing numeric context.

      DOH.

      Of course you're right.

      I was thinking of the situation where the prototyping of print (which is the prototyping I meant, not the prototyping of stat) where it treats a function call as a filehandle. I know I've been nailed by that one before. (Although annoyingly i cant think of an example at the minute. Anybody knows of one please post it for the record)

      Oh and thanks, I had forgotten the + trick.

      Yves / DeMerphq
      ---
      Writing a good benchmark isnt as easy as it might look.