s{^\x{feff}*}{}; #### #!/usr/bin/perl use strict; use warnings; use Encode; use Benchmark qw(:all); binmode(STDOUT, ":utf8"); #my $xmlcmt = ""; my $xmlcmt = ""; my $str_lat = "My \x{20AC}0.02 of info"; my $str_ara = decode_utf8("\xd8\xa7\xd9\x84\xd8\xa3\xd9\x86\xd8\xb4\xd8\xb7\xd8\xa9"); print Encode::is_utf8($str_lat) ? "Is_utf8" : "Not_utf8", "\t"; print $str_lat, "\n"; print Encode::is_utf8($str_ara) ? "Is_utf8" : "Not_utf8", "\t"; print $str_ara, "\n"; timethese(2, { "ara nocmt 1step" => sub { s1($str_ara) }, "ara nocmt 2step" => sub { s2($str_ara) }, "ara w-cmt 1step" => sub { s1($xmlcmt . $str_ara) }, "ara w-cmt 2step" => sub { s2($xmlcmt . $str_ara) }, "lat nocmt 1step" => sub { s1($str_lat) }, "lat nocmt 2step" => sub { s2($str_lat) }, "lat w-cmt 1step" => sub { s1($xmlcmt . $str_lat) }, "lat w-cmt 2step" => sub { s2($xmlcmt . $str_lat) }, }); # Do the replacement in 1 step sub s1 { my $s = shift; #$s =~ s{^\x{feff}*}{}; # This is fast #$s =~ s{^\x{feff}*}{}; # This is fast #$s =~ s{^\x{feff}?}{}; # This is fast $s =~ s{^\x{feff}*}{}; # This could be slow } # Do the replacement in 2 steps sub s2 { my $s = shift; $s =~ s{^\x{feff}*}{}; $s =~ s{^}{}; }