in reply to Can't use string blah as an ARRAY ref

Are you trying to get a count of how many items there are in @_?

printf("There are %d args.\n", scalar(@_));

If you are confused about the exact meaning of the error message, it's this...

  1. $#{ ... } can be used to get the last index of an arrayref. It expects the contents of the braces to be an arrayref - i.e. a scalar.
  2. Thus it imposes a "scalar context" when evaluating the contents of the braces.
  3. Thus in $#{@_}, a scalar context gets imposed on @_.

  4. When a scalar context is imposed on an array, it returns the number of items in the array.
  5. Thus you end up with: $#{ $some_number }, and Perl thinks you're trying to use some number as an arrayref.
  6. Numbers and strings are pretty much interchangeable, thus you get the error message about not being able to use a string as an arrayref.

I think what you wanted was $#_.

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^2: Can't use string blah as an ARRAY ref
by kingram (Acolyte) on Jul 30, 2012 at 07:45 UTC
    Yes!