Perhaps
param() is using a bare
return on error.
A bare
return returns undef
or the empty list, depending on the context in which the subroutine was called!
Your second example calls
param() in scalar context, so a bare
return would give you
undef;
Your first example calls
param() in list context, so a bare
return would give you
().
To help confirm my diagnosis, try replacing your anon-hash constructors
{...} with anon-array constructors
[...],
and impose scalar context by using
scalar directly. By avoiding the hash, you will prevent confusion from the random hash ordering in your dump.
use strict;
use warnings;
...
my $dump_string = Dumper [
### Uncomment one or the other of these two lines.
# edit_usr_id => $self->client->param( 'edit_usr_id' ),
edit_usr_id => scalar( $self->client->param( 'edit_usr_id' ) ),
mode => $self->client->param( 'mode' )
];
$self->log(LOGDEBUG, 'EDIT_USER: '.$dump_string ));
It should give something like:
EDIT_USER: $VAR1 = [
'edit_usr_id',
undef,
'mode',
'add',
];
or:
EDIT_USER: $VAR1 = [
'edit_usr_id',
'mode',
'add',
];
Also, you should have gotten a warning about 'Odd number of elements' in your hash assignment in your first example. You do have warnings turned on, don't you?