Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister
 
PerlMonks  

Where is the constant? Where is the void context?

by princepawn (Parson)
on Nov 21, 2000 at 19:41 UTC ( [id://42708]=note: print w/replies, xml ) Need Help??


in reply to (Ovid) Re: useless use of a constant in a void context?
in thread useless use of a constant in a void context?

The explanation given in the Camel book isn't satisfying to me. The error message was "useless use of a constant in a void context"

Where is the constant? Where is the void context?

  • Comment on Where is the constant? Where is the void context?

Replies are listed 'Best First'.
Re: Where is the constant? Where is the void context?
by extremely (Priest) on Nov 22, 2000 at 05:31 UTC
    Do you understand context? It freaked me out once or fifty times too. =) When perl is compiling your code, it looks at structures like these and decides on what "context" codehere() is in:
    codehere(); #void context $c=codehere(); #scalar context ($l)=codehere(); #list context @a=codehere(); #list context %h=codehere(); #list context print codehere(); #list context foreach (codehere()) { #list context if ( 1 <= codehere() ) { #scalar context

    When you do something along the lines of this: $a=( codehere(),codehere() ); then the $a= forces the right side into scalar context since perl can see you don't want a list so in scalar context, the right side isn't treated as a list but as a statement group. Thus, "," is an operator that forces void context on it's left-hand-side and passes on the whatever context it is in to it's right-hand-side. Since you strung together a series of values like this: $a = ( 2, 3, 4, 5, 6 ); the first four numbers are in void context and only the last item in the series is in scalar context. Thus your statement could be rewritten: 2; 3; 4; 5; $a = 6;

    And, bam!, from that you can see there are 4 constants in void context. Run either of those with perl -we on the command line and enjoy seeing the 4 warnings pop-up.

    BTW, $a = ( 1, 5 ); pulls no error. =) It seems that perl and in fact Perl treat 1; special.

    HTH Historical note, 4 years ago, or more, merlyn took me to task for snorting at the idea of a comma operator. =) I was so embarassed I re-read the pink camel from cover to cover before I ever posted to the c.l.p.m again. I wish I still had that archive, he explained in about 4 sentences what it took me 3 paragraphs to explain. oh well... =P

    --
    $you = new YOU;
    honk() if $you->love(perl)

Re: Where is the constant? Where is the void context?
by merlyn (Sage) on Nov 21, 2000 at 19:44 UTC
    The 'constant' is any of the numbers before the last.

    The 'void context' is that you're throwing it away, instead of using it.

    -- Randal L. Schwartz, Perl hacker

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others admiring the Monastery: (6)
As of 2024-04-19 08:39 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found