Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things

Re: mysterious hash ref result

by BrowserUk (Pope)
on Jan 12, 2007 at 13:44 UTC ( #594383=note: print w/replies, xml ) Need Help??

in reply to mysterious hash ref result

In a word, context. Try it like this:

$self->log(LOGDEBUG, 'EDIT_USER: '. Dumper( { state => 'db_user', usr_id => $self->client->param( 'usr_id' ), edit_usr_id => scalar( $self->client->param( 'edit_usr_id' ) ) +, mode => $self->client->param( 'mode' ) } ) );

Assuming that produces the desired result, the problem is that in your first example, you are calling $self->client->param( 'edit_usr_id' ) in a list context, whereas in your second example it is called in a scalar context.

self->client->param( .. ) probably finishes something like:

sub param { ... return unless exists ... return ...; }

That is to say, it executes a bare return statement if the parameter does not exist. In a scalar context, a bare return will assign undef to the scalar (lvalue). In a list context, it will return the 'empty list' (usually denoted by ()), but when an empty list is incorporated into a larger list, it is folded to nothing. Essentially, it disappears. Eg:

Perl> sub x{ return };; Perl> @b = ( 1,2,'a', x(), 5, 6 );; Perl> print "@b";; 1 2 a 5 6 Perl> @b = ( 1,2,'a', scalar( x() ), 5, 6 );; Perl> print "@b";; Use of uninitialized value in join or string at (eval 13) line 1 1 2 a 5 6

In the former, sub x() is called in a list context, so the return statement returns the empty list and that get folded and disappears making no contribution to the state of @b.

In the latter, it is called in a scalar context, so it returns undef, which causes the 4th element of @b to take the value undef.

Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.

Replies are listed 'Best First'.
Re^2: mysterious hash ref result
by ftumsh (Scribe) on Jan 12, 2007 at 14:15 UTC
    Ah, thank you all very much for that. I did not know that being on the RHS of a => meant list context. I've tracked down the method and indeed it does return a list or scalar, depending upon context.
      I did not know that being on the RHS of a => meant list context

      To be precise, it doesn't really. Being on the inside of an anonymous hash constructor means list context.

Log In?

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

How do I use this? | Other CB clients
Other Users?
Others making s'mores by the fire in the courtyard of the Monastery: (4)
As of 2020-02-18 10:42 GMT
Find Nodes?
    Voting Booth?
    What numbers are you going to focus on primarily in 2020?

    Results (75 votes). Check out past polls.