http://qs321.pair.com?node_id=960098


in reply to Re^4: Line numbers
in thread Line numbers

That there exists an explanation does not imply that the explanation is obvious.

I understand that light may act as a wave or particle depending on how you study it. However, this fact is not obvious. It is in fact incredibly non-obvious, which is how it took science so long to get there.

That [caller(0)]->[0] works is (at least to me) obvious. That (caller(0))[0] works and caller(0)[0] fails is (again, to me) non-obvious.

perl -E'sub Monkey::do{say$_,for@_,do{($monkey=[caller(0)]->[3])=~s{::}{ }and$monkey}}"Monkey say"->Monkey::do'

Replies are listed 'Best First'.
Re^6: Line numbers
by chromatic (Archbishop) on Mar 17, 2012 at 00:42 UTC
    I understand that light may act as a wave or particle depending on how you study it.

    Certainly, but unlike particle physics, Perl comes with a manual.

    I'm not claiming that slicing the list returned from a function has syntax that's immediately obvious to everyone, but it's not that obscure once you understand Perl's precedence.

Re^6: Line numbers
by Anonymous Monk on Mar 17, 2012 at 00:39 UTC
    So you exchange parens for square brackets and add an arrow instead. Sorry, but you really haven't proven your point. They are both non-obvious until you understand how Perl handles precedence and lists. caller(0)[0] fails because you are trying to index a scalar, not a list.
      > fails because you are trying to index a scalar

      No,it fails because it's undefined syntax

      syntax error ... near ")["

      and indexing a list always requires parens!

      see perldata

      A list value may also be subscripted like a normal array. You must +put the list in parentheses to avoid ambiguity.

      Cheers Rolf