#!/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; } #### perl -e '$f1=`cat file1`;open $f2,"<","file2";while(<$f2>){chomp;($k,$v)=split "_";$f1=~s/$k/${k}_$v/g;}print $f1;'