use File::Slurp; my @myHashArray = ( { toFind => qr/(?i)foo/, toReplace => 'bar' } ); my $counter = 0; my $name = 'data_file'; # $File::Find::name for my $line (read_file('data_file', chomp => 1)) { $counter++; my $orig_line = $line; $line =~ s/$_->{toFind}/$_->{toReplace}/g for @myHashArray; next if $line eq $orig_line; print "LOG: $counter $name\n"; print "LOG: \t Original line: $orig_line\n"; print "LOG: \t Replaced line: $line\n"; } #### Foolius Caesar Footholomew Cubbins No changes here Just another barrage of text #### LOG: 1 data_file LOG: Original line: Foolius Caesar LOG: Replaced line: barlius Caesar LOG: 2 data_file LOG: Original line: Footholomew Cubbins LOG: Replaced line: bartholomew Cubbins