in reply to Clash between IO layers and "in memory" files?

What seems to work is to specify any layers in an extra binmode statement, i.e. while this doesn't work

use Fatal "open"; open my $fh, "<:raw", \"foo"; print <$fh>, "\n"; --> dies with: Can't open(GLOB(0x65ea40), <:raw, SCALAR(0x65eaa0)): No such file or d +irectory at (eval 1) line 3 main::__ANON__('GLOB(0x65ea40)', '<:raw', 'SCALAR(0x65eaa0)') +called at ./openstr.pl line 5

this does work

open my $fh, "<", \"foo"; binmode $fh, ":raw"; print <$fh>, "\n"; --> prints: foo

(Not sure if I'm telling you anything new -- just in case...)

Anyway, I agree that this is kinda weird.

Replies are listed 'Best First'.
Re^2: Clash between IO layers and "in memory" files?
by blazar (Canon) on Mar 29, 2007 at 13:49 UTC
    (Not sure if I'm telling you anything new -- just in case...)

    Actually I stumbled into this issue when wanting to prepare a minimal example for a clpmisc post, and then I didn't think of it, so I eventually did something different. After having posted I did test with a separate binmode, but didn't include reference to it here because I wanted to stay concise (which is not a quality of mine!)

    Anyway, I agree that this is kinda weird.

    Indeed, I do not actually have a problem. I'm only puzzled by this behaviour: in some sense, it would make more sense if it didn't work with binmode either, don't you think so?