http://www.perlmonks.org?node_id=314862


in reply to Variable assignment confusion

Well, you're assigning either the result of a match or, if the match is without success, the retid + "_001". It's not true that this always assigns 1, it only assigns 1 when the match is successfull, because a simple m// returns a boolean (undef or 1) and || will return it's left operand's result if it's true.

What you want is, as you said:

# parens not neccessary here
my $new_retid = 
# if the retid has the suffix
    $retid =~ /_\d{3}$/ ?
# then leave it as is
    $retid :
# otherwise add _001 suffix
   $retid.'_001'

See perlop for "?:" and the behaviour of m//. HTH

--
http://fruiture.de