package PerlIO::via::AnyCRLF; sub PUSHED { my ($class) = @_; my $have_crlf; return bless \$have_crlf, $class; } sub FILL { my ($self, $fh) = @_; binmode $fh, ":crlf" unless $$self; $$self = 1; my $len = read $fh, my $buf, 4096; if (defined $buf) { $buf =~ s/\r/\n/g; } return $len > 0 ? $buf : undef; } 1; #### #!/usr/bin/perl use PerlIO::via::AnyCRLF; open my $f, "<:via(AnyCRLF)", "le.txt" or die $!; # debug # print "layers before reading :", join(':',PerlIO::get_layers($f)), "\n"; # :unix:perlio:via print while <$f>; # print "layers after reading :", join(':',PerlIO::get_layers($f)), "\n"; # :unix:perlio:crlf:via #### package PerlIO::via::AnyCRLF; sub PUSHED { my ($class) = @_; my $fh_ref; return bless \$fh_ref, $class; } sub FILL { my ($self) = @_; my $len = read $$self, my $buf, 4096; if (defined $buf) { $buf =~ s/\r/\n/g; } return $len > 0 ? $buf : undef; } sub OPEN { my ($self, $path) = @_; open $$self, "<:crlf", $path or die $!; # debug # print "AnyCRLF layers :", join(':',PerlIO::get_layers($$self)), "\n"; return 1; } 1;