Bod has asked for the wisdom of the Perl Monks concerning the following question:
Is there something strange about the way return treats conditions?
I have this and it doesn't work as expected...
If it is called as get_ids( 'format' => 'json' ); it works fine but asking it to return a text string returns undef and warns Useless use of string in void context at line 229. The way I think it should work is that if $result{'message'} evaluates as true, that will get returned but if it evaluates as false then "$result{'api-key'}:$result{'session'}" wil be returned instead.sub get_ids { my ($self, %attrs) = @_; # Do stuff... my %result; # $result{'message'} = ''; if ($self->{'error'}) { $result{'status'} = 'error'; $result{'message'} = $self->{'error'}; } else { $result{'status'} = 'success'; $result{'api-key'} = $self->{'api-public'}; $result{'session'} = $intent_id; } return encode_json(\%result) if lc($attrs{'format'}) eq 'json'; return $result{'message'} or "$result{'api-key'}:$result{'session' +}"; # <- line 229 return "SOMETHING"; }
Can you explain why this is not behaving as expected?
As an aside, in searching for an answer I found this post -> Useless use of string in void context
There it is suggested that Perl reports the wrong line number for this warning so it is quite possible that I'm actually looking in the wrong place!
|
|---|