use warnings; use strict; use Encode qw/decode/; sub guess_utf8_cp1252 { # WARNING: Does NOT work for other encodings my ($fn) = @_; open my $fh, '<:raw', $fn or die "$fn: $!"; my $raw = do { local $/; <$fh> }; # slurp close $fh; my $decoded; eval { $decoded = decode('UTF-8', $raw, Encode::FB_CROAK ); 1} or eval { $decoded = decode('CP1252', $raw, Encode::FB_CROAK ); 1} or die "$fn: Could not decode"; return $decoded; }