The perlsyn doc on statment modifiers says that a line such as my $var = 1 if $test; leads to an undefined behaviour: you don't know what happens to the variable if the condition evaluates to false.
Anyway in your case, even if you had written my $var; $var = $params->{test} if exists $params->{test}, you would still have the same result, because unless $params->{test} exists, you don't put any value in $test1.
A simple way to do what you want is to write:
my $i = shift; my $params = shift; my $test1 = $i; # $test1 is $i by default $test1 = $params->{test} if exists $params->{test}; # change its value + when appropriate
You may be interested by the defined or operator (which would still lead to autovivification of the $params->{test} value in your case), and the ternary operator to solve problems similar to this one.
In reply to Re: postfix syntax enlightenment
by Eily
in thread postfix syntax enlightenment
by RobertCraven
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |