Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling
 
PerlMonks  

Re: Easy Reference for Contexts

by LanX (Saint)
on Apr 14, 2011 at 13:42 UTC ( [id://899435]=note: print w/replies, xml ) Need Help??


in reply to Easy Reference for Contexts

m/.../ returns true or false in scalar context m/.../g give you a list of matches in list context m/(...)/ can populate an array with whatever gets captured... (??) while( ) i.e. inside parenthesis is evaluated in scalar context? foreach( ) i.e. inside parenthesis is evaluated in list context? <STDIN> returns the next line of input in list context

Well ... most of this can be tested interactively.

The inside context with wantarray the outside context behavior with print, print scalar and a void call.

For instance I doubted that scalar m// returns true or false (those identifiers don't exist in Perl), I thought it's the number of matches returned.

But I was wrong: :)

DB<23> $_="aaa" DB<24> print scalar m/a/ 1

Cheers Rolf

UPDATE: Forgot to mention, you can also check the prototype for most builtins:

perl -e 'print prototype "CORE::push","\n"' \@@
which is more complex than just void, list and scalar... check out perlsub for details.

And some builtins (like map) have such a "rich" syntax that they can't be expressed with prototypes.

Replies are listed 'Best First'.
Re^2: Easy Reference for Contexts
by tchrist (Pilgrim) on Apr 14, 2011 at 19:27 UTC
    For instance I doubted that scalar m// returns true or false (those identifiers don't exist in Perl), I thought it's the number of matches returned.

    But I was wrong: :)

    DB<23> $_="aaa" DB<24> print scalar m/a/ 1
    Anything in Perl is true or false. Or rather, ANYTHING is true but undef is false. 😋

    Like the relops, m//, s///, and y/// can all return the magical false value, that secret special value that nobody talks about:

    % perl -wle 'printf "got %d matches\n", scalar ANYTHING =~ /nothing/'
    got 0 matches
    So I shan’t, either. 😜
      > Or rather, ANYTHING is true but undef is false.

      Many things in Perl are evaluated to false in boolean context, not only undef.

      Cheers Rolf

        Tom is right. ANYTHING is true:
        $ perl -E 'say +ANYTHING ? "true" : "false"' true

Log In?
Username:
Password:

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

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

    No recent polls found