#!/usr/bin/env perl use 5.010; use warnings; use strict; my %h; open my $fd2, '<', 'file2' or die $!; while (<$fd2>){ chomp; my($k, $v) = split /_/; $h{$k} = $v; } open my $fd1, '<', 'file1' or die $!; while (<$fd1>){ s/(\w+)/$h{$1}?"${1}_$h{$1}":$1/ge; print; }