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.
In reply to Re: mysterious hash ref result
by BrowserUk
in thread mysterious hash ref result
by ftumsh
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |