Put parentheses around the expression,
my $res = ($cond1 or $cond2);
or use the higher priority operator || ,
my $res = $cond1 || $cond2;
since your code is interpreted by perl as (my $res = $cond1) or $cond2; or more precisely
perl -MO=Deparse -e '$res = $cond1 or $cond2;' $cond2 unless $res = $cond1;
If you used use warnings; , he would also warn you about $cond2 ,
Useless use of a variable in void context
Dry27 source share