use Modern::Perl; my %rule = ( 0 => 0, 1 => -1, 2 => -2, 3 => 2, 4 => 1, 5 => 0, 6 => -1, 7 => -2, 8 => 2, 9 => 1, ); my @nums = 0..30; foreach (@nums) { print "in=$_"; s/(\d*(\d))/$1+$rule{$2}/e; say "\t rounded=$_"; }