my %translate = ( '0 0' => -1, '0 1' => -1, '0 2' => -1, '1 0' => -1, '1 1' => 0, '1 2' => 1, '2 0' => -1, '2 1' => 1, '2 2' => 2, ); while (<$fh>) { s/(\d \d)/$translate{$1}/g; print "New line: $_"; } #### while () { s{(\d)\s+(\d)}{log(($1 * $2) || (1/2)) / log(2)}eg; print "New line: $_"; } __DATA__ 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 2 0 1 0 1 0 1 0 1 1 1 2 2 0 2 0 2 0 2 0 2 1 2 1 1 1 0 1 0 1 0 1 0 1 2 1 2 1 1 1 1 1 1 1 1 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 0 2 0 2 0 2 0 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 2 2 2 2 2 2 2 2 2 #### New line: 0 0 -1 -1 -1 -1 New line: 0 1 -1 -1 -1 -1 New line: 0 2 -1 -1 -1 -1 New line: 1 0 -1 -1 -1 -1 New line: 1 1 0 0 0 0 New line: 1 2 1 1 1 1 New line: 2 0 -1 -1 -1 -1 New line: 2 1 1 1 1 1 New line: 2 2 2 2 2 2