Beefy Boxes and Bandwidth Generously Provided by pair Networks chromatic writing perl on a camel
Perl Monk, Perl Meditation
 
PerlMonks  

Re: Can't use string blah as an ARRAY ref

by tobyink (Monsignor)
on Jul 30, 2012 at 07:37 UTC ( #984378=note: print w/ replies, xml ) Need Help??


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'


Comment on Re: Can't use string blah as an ARRAY ref
Select or Download Code
Re^2: Can't use string blah as an ARRAY ref
by kingram (Acolyte) on Jul 30, 2012 at 07:45 UTC
    Yes!

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://984378]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others wandering the Monastery: (16)
As of 2013-06-19 06:01 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    How many continents have you visited?









    Results (642 votes), past polls