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'

In reply to Re: Can't use string blah as an ARRAY ref by tobyink
in thread Can't use string blah as an ARRAY ref by kingram

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.