From: SADAHIRO Tomoyuki Date: Mon, 9 Jan 2006 01:29:30 +0000 (+0900) Subject: Re: [perl #38181] Default IO Layer is ignored in 3-argument open call X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=6d5e88a0347ef2c76da06c6ba6c6643e226cbccf;p=p5sagit%2Fp5-mst-13.2.git Re: [perl #38181] Default IO Layer is ignored in 3-argument open call Message-Id: <20060109012103.F20A.BQW10602@nifty.com> p4raw-id: //depot/perl@26739 --- diff --git a/lib/open.pm b/lib/open.pm index 24488e6..c2eae57 100644 --- a/lib/open.pm +++ b/lib/open.pm @@ -169,9 +169,8 @@ The C pragma serves as one of the interfaces to declare default "layers" (also known as "disciplines") for all I/O. Any two-argument open(), readpipe() (aka qx//) and similar operators found within the lexical scope of this pragma will use the declared defaults. -Three-argument opens are not affected by this pragma since there you -(can) explicitly specify the layers and are supposed to know what you -are doing. +Even three-argument opens may be affected by this pragma +when they don't specify IO layers in MODE. With the C subpragma you can declare the default layers of input streams, and with the C subpragma you can declare @@ -180,7 +179,7 @@ you can control both input and output streams simultaneously. If you have a legacy encoding, you can use the C<:encoding(...)> tag. -if you want to set your encoding layers based on your +If you want to set your encoding layers based on your locale environment variables, you can use the C<:locale> tag. For example: diff --git a/pod/perlfunc.pod b/pod/perlfunc.pod index abc8355..8af5d64 100644 --- a/pod/perlfunc.pod +++ b/pod/perlfunc.pod @@ -3108,9 +3108,9 @@ L for more details). For example open(FH, "<:utf8", "file") will open the UTF-8 encoded file containing Unicode characters, -see L. (Note that if layers are specified in the -three-arg form then default layers set by the C pragma are -ignored.) +see L. Note that if layers are specified in the +three-arg form then default layers stored in ${^OPEN} (see L; +usually set by the B pragma or the switch B<-CioD>) are ignored. Open returns nonzero upon success, the undefined value otherwise. If the C involved a pipe, the return value happens to be the pid of