my $output = ''; my %translations; my %scrubbed; for my $line (split(//m, $file, -1)) { if ( my ($pre, $real_dev, $name, $post) = $line =~ /^ ( \s+ description \s ) (\w\w\w\w(-\w+-\w+)) ( ; .* ) /xs) { ) { my $scrubbed_dev = $translation{$real_dev}; if (!$scrubbed_dev) { # Make sure not to duplicate anything in %scrubbed. $scrubbed_dev = ...; ++$scrubbed{$scrubbed_dev}; $translation{$real_dev} = $scrubbed_dev; } $output .= $pre . $scrubbed_dev . $post; } else { $output .= $line; } }