open(my $fh, "<:encoding($CEF)", $qfn) or die; while (<$fh>) { print("Line $. contains EM DASH\n") if /\x{2014}/; } #### # :locale doesn't work on Windows :( use open ':std', ':encoding(cp1252)'; for my $enc (qw( Windows-1252 UTF-8 )) { print("$enc:\n"); { open(my $fh, ">:encoding($enc)", 'data.txt') or die; print($fh "foo\nbar\nfoo\x{2014}bar\nmeow\n"); } { open(my $fh, "<:encoding($enc)", 'data.txt') or die; while (<$fh>) { print; print("Line $. contains EM DASH\n") if /\x{2014}/; } } print("\n"); }