#!/usr/bin/perl use strict; use warnings; use Benchmark 'cmpthese'; cmpthese(-1, { method1 => '&yours', method2 => '&new_one', }); sub yours{ my %mapper; open(MAP, ") { chomp; tr/A-Z/a-z/; my @map_line = split (/\t/); $mapper{$map_line[0]} = $map_line[1]; } close(MAP); open(IN, "input_new.txt"); while () { #print "%"; tr/A-Z/a-z/; foreach my $key (sort keys %mapper) { s/\b$key\b/$mapper{$key}/g; } print OUT "$_"; } close(IN); close(OUT); } sub new_one{ open(MAP, "map.ini"); my $map = do{local $/;}; close(MAP); my %mapper; $map = lc($map); %mapper = map{split/\t/,$_} split(/\n/, $map); open(IN, "input1.txt"); my $input = do{local $/;}; close(IN); open(OUT, ">input_new.txt"); $input = lc($input); foreach my $key (sort keys %mapper) { $input =~ s/\b$key\b/$mapper{$key}/g; } print OUT $input; close(OUT); } __END__ Rate method1 method2 method1 908/s -- -13% method2 1050/s 16% --