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.
"Too many [] have been sedated by an oppressive environment of political correctness and risk aversion."

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.