This excellent sentence got me pointed in the right direction! Thank you. Here's what the regex engine was freaking out about:
Matching that data triggers the fatal code point error, but only if the regex fails to match a string (numbers seem to match or fail quietly). Different versions of perl give different results.Encode::decode(utf8 => $binary_data) # from binmode filehandle
Perl 5.26.2:
Fperl -MEncode -le 'open my $fh, "<", $^X; binmode $fh; local $/ = unde +f; my $data = <$fh>; close $fh; $data = Encode::decode(utf8 => $data) +; print $1 if $data =~ /(f)/i;'
fuperl -MEncode -le 'open my $fh, "<", $^X; binmode $fh; local $/ = unde +f; my $data = <$fh>; close $fh; $data = Encode::decode(utf8 => $data) +; print $1 if $data =~ /(fu)/i;'
Operation "pattern match (m//)" returns its argument for UTF-16 surrogate U+DFA8 at -e line 1.perl -MEncode -le 'open my $fh, "<", $^X; binmode $fh; local $/ = unde +f; my $data = <$fh>; close $fh; $data = Encode::decode(utf8 => $data) +; print $1 if $data =~ /(fub)/i;'
Operation "pattern match (m//)" returns its argument for non-Unicode code point 0x1C9140 at -e line 1.
Operation "pattern match (m//)" returns its argument for non-Unicode code point 0xE6BAAA at -e line 1.
Use of code point 0xFFFFFFFFFFFFFFFF is deprecated; the permissible max is 0x7FFFFFFFFFFFFFFF. This will be fatal in Perl 5.28 in pattern match (m//) at -e line 1.
Use of code point 0xFFFFFFFFFFFFFFFF is deprecated; the permissible max is 0x7FFFFFFFFFFFFFFF. This will be fatal in Perl 5.28 at -e line 1.
Operation "pattern match (m//)" returns its argument for non-Unicode code point 0xFFFFFFFFFFFFFFFF at -e line 1.
fperl -MEncode -le 'open my $fh, "<", $^X; binmode $fh; local $/ = unde +f; my $data = <$fh>; close $fh; $data = Encode::decode(utf8 => $data) +; print $1 if $data =~ /(f)/i;'
Operation "pattern match (m//)" returns its argument for UTF-16 surrogate U+DFA9 at -e line 1.perl -MEncode -le 'open my $fh, "<", $^X; binmode $fh; local $/ = unde +f; my $data = <$fh>; close $fh; $data = Encode::decode(utf8 => $data) +; print $1 if $data =~ /(fu)/i;'
FU
Operation "pattern match (m//)" returns its argument for UTF-16 surrogate U+DFA9 at -e line 1.perl -MEncode -le 'open my $fh, "<", $^X; binmode $fh; local $/ = unde +f; my $data = <$fh>; close $fh; $data = Encode::decode(utf8 => $data) +; print $1 if $data =~ /(fub)/i;'
Operation "pattern match (m//)" returns its argument for non-Unicode code point 0x1CB760 at -e line 1.
Operation "pattern match (m//)" returns its argument for non-Unicode code point 0x18B14C at -e line 1.
Operation "pattern match (m//)" returns its argument for non-Unicode code point 0x7FFFFFFFFFFFFFFF at -e line 1.
1perl -MEncode -le 'open my $fh, "<", $^X; binmode $fh; local $/ = unde +f; my $data = <$fh>; close $fh; $data = Encode::decode(utf8 => $data) +; print $1 if $data =~ /(1)/i;'
perl -MEncode -le 'open my $fh, "<", $^X; binmode $fh; local $/ = unde +f; my $data = <$fh>; close $fh; $data = Encode::decode(utf8 => $data) +; print $1 if $data =~ /(666)/i;'
In reply to Re^7: Fatal code point 0xFFFFFFFFFFFFFFFF
by Anonymous Monk
in thread Fatal code point 0xFFFFFFFFFFFFFFFF
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |