in reply to Re^2: Using ":raw" layer in open() vs. calling binmode()
in thread Using ":raw" layer in open() vs. calling binmode()
Thanks for your advice !
It's interesting that binmode() only disables the :crlf layer but doesn't remove it. (Just discovered, that's actually documented in PerlIO.)
Does it still interfere with tell() even when it's disabled ? (perlport says: "If you use binmode on a file, however, you can usually seek and tell with arbitrary values in safety.")
I'm just curious, what happens if you try these on Windows:
open $fh, "<", $^X or die; binmode $fh, ":raw"; # perldoc says: identical to 'binmode $fh' print "3: ", join(' ', PerlIO::get_layers($fh, details => 1)), "\n"; close $fh; open $fh, "<", $^X or die; binmode $fh, ":raw:perlio"; # seems not useful (see below) print "4: ", join(' ', PerlIO::get_layers($fh, details => 1)), "\n"; close $fh;
On UNIX that gives:
3: unix 4195328 perlio 4195328 4: unix 4195328 perlio 4195328 perlio 4195328
I know this discussion should probably go into a Perl develompent group but let me just explain where I'm having problems to understand things here:
If one has to use open($fh, '<:raw:perlio', $file) to get a clean and buffered binary stream this unconditionally forces a :perlio layer onto the stack, which in turn inserts a :unix layer below it.
Now, what about MacOS where Perl uses :stdio by default ? (I know far too little about MacOS but it must be faster than :unix:perlio there.) Also if someone wants to change the default layers via the PERLIO environment variable (for whatever reason), it would be blithely ignored on those streams.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^4: Using ":raw" layer in open() vs. calling binmode()
by Anonymous Monk on Jun 15, 2007 at 15:41 UTC |