in reply to Odd behaviour of chomp()

It's a bug that's been fixed in 5.22.0.

From perl5220delta.pod:

Assignment to a lexical scalar is often optimised away; for example in C<my $x; $x = $y + $z>, the assign operator is optimised away and the +add operator writes its result directly to C<$x>. Various bugs related to this optimisation have been fixed. Certain operators on the right-han +d side would sometimes fail to assign the value at all or assign the wro +ng value, or would call STORE twice or not at all on tied variables. The operators affected were C<$foo++>, C<$foo-->, and C<-$foo> under C<use integer>, C<chomp>, C<chr> and C<setpgrp>.

Dave.