sub translate { my $str = shift; my @chunks = split /<(\d+)>/ => $str; my @results; while (@chunks) { my ($number, $string) = splice @chunks => 0, 2; if ($number == 30) { ... } else { push @results => '@(' . $hash {$number} . ')', qq {"$string"}; } } join ";" => @results; }