It seems that if the MODE parameter in a three args open contains IO layers and the third one is a scalar reference, then the latter is not open()ed in memory, but its stringification is interpreted as a filename:
picard:~ [10:30:46]$ perl -MFatal=open -e 'open F, "<", \"foo"' picard:~ [10:31:02]$ ^<^<:raw perl -MFatal=open -e 'open F, "<:raw", \"foo"' Can't open(F, <:raw, SCALAR(0x814fe04)): No such file or directory at +(eval 1) line 3 main::__ANON__('F', '<:raw', 'SCALAR(0x814fe04)') called at -e + line 1
and
picard:~ [10:35:09]$ perl -MFatal=open -e 'open F, ">", \$a' picard:~ [10:35:11]$ ^>^>:raw perl -MFatal=open -e 'open F, ">:raw", \$a' picard:~ [10:35:34]$ ls SCALAR\(0x814fe04\) SCALAR(0x814fe04)
Is this expected, documented, etc? I don't see anything in open()'s documentation to this effect...
In reply to Clash between IO layers and "in memory" files? by blazar
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |