... my $echo = 'ECHO'; my ($dffname, $listname) = @ARGV; my $fh; # read key/val lists open $fh, '<', $dffname or die "$dffname $!"; my %lijst = map { chomp; (split /\t|\s{2,}/)[1,0] } <$fh>; close $fh; # readfile list open $fh, '<', $listname or die "$listname $!"; my @listfiles = <$fh>; chomp @listfiles; close $fh; for my $file (@listfiles) { # read original file open $fh, '<', $file or die "$file $!"; local $/; my $content = <$fh>; close $fh; # modify content while( my ($key, $val) = each %lijst ) { next unless $val == 1; $content =~ s/^$key$/$echo/gms; $content =~ s/^$key$/$echo/; # re-subsitute first (?) } # write modified file open $fh, '>', "$file.out" or die "$file.out $!"; print $fh $content } ...