use constant APOSTROPHE => "\xE2\x80\x99" ; my $string =~ s/APOSTROPHE/'/ ; #### use constant APOSTROPHE => "\xE2\x80\x99" ; my $string = "wjzw’xl cowuxze."; $string =~ s/APOSTROPHE/'/ ; #### my $pos = index $string, APOSTROPHE; substr($string, $pos, length APOSTROPHE) = q{'}; #### #!/usr/bin/env perl use 5.010; use strict; use warnings; use utf8; use open OUT => qw{:encoding(UTF-8) :std}; my $string1 = 'abc’def’ghi’jkl'; my $string2 = 'mno’pqr’stu’vwx'; say '*** BEFORE ***'; say "\$string1[$string1]"; say "\$string2[$string2]"; ($string1, $string2) = @{fancy_apos_to_ascii_apos(\($string1, $string2))}; say '*** AFTER ***'; say "\$string1[$string1]"; say "\$string2[$string2]"; sub fancy_apos_to_ascii_apos { my (@fancies) = @_; state $fancy_apos = '’'; state $fancy_apos_len = length $fancy_apos; my $asciis = []; for my $string (map $$_, @fancies) { while ((my $pos = index $string, $fancy_apos) >= 0) { substr($string, $pos, $fancy_apos_len) = q{'}; } push @$asciis, $string; } return $asciis; } #### *** BEFORE *** $string1[abc’def’ghi’jkl] $string2[mno’pqr’stu’vwx] *** AFTER *** $string1[abc'def'ghi'jkl] $string2[mno'pqr'stu'vwx]