in reply to How do I use the "File::ReadBackwards" and open in "Unicode text, UTF-32, little-endian" mode

Sadly File::ReadBackwards doesn't provide the ability to specify encodings or PerlIO layers. It just reads the file as bytes. (File a bug report!)

That doesn't mean your task is impossible - you just need to manually encode/decode in a few places.

use 5.008; use strict; use warnings; use Encode qw( encode decode ); use File::Temp qw( tempfile ); use File::ReadBackwards qw(); # Pick a random filename (undef, my $filename) = tempfile(); # Create some content for an example { open my $fh, ">:encoding(UTF-32LE)", $filename or die "can haz file?? $!"; print $fh "$_\n" for qw/ foo bar baz /; close $fh; } # Now let's open it. Note that we need to tell File::ReadBackwards # that the line seperator is the UTF-32-encoded version of "\n". my $fh = "File::ReadBackwards"->new( $filename, encode("UTF-32LE", "\n") => 0, ) or die "can haz file?? $!"; # Read each line while (defined(my $line = $fh->readline)) { # Need to decode line from UTF-32 to Perl's internal encoding $line = decode("UTF-32LE", $line); print "GOT: $line"; } # Delete our temp file unlink $filename;
package Cow { use Moo; has name => (is => 'lazy', default => sub { 'Mooington' }) } say Cow->new->name
  • Comment on Re: How do I use the "File::ReadBackwards" and open in "Unicode text, UTF-32, little-endian" mode
  • Download Code

Replies are listed 'Best First'.
Re^2: How do I use the "File::ReadBackwards" and open in "Unicode text, UTF-32, little-endian" mode
by hashperl (Initiate) on Mar 12, 2013 at 17:42 UTC
    Thanks for your reply, I tried your code and that run fine, trying to incorporate that into my code isn't working for me at the moment but that may be my end. I may need a rethink and some more background reading.