argra****@users*****
argra****@users*****
2009年 4月 23日 (木) 22:53:42 JST
Index: docs/modules/open-1.06/open.pod diff -u /dev/null docs/modules/open-1.06/open.pod:1.1 --- /dev/null Thu Apr 23 22:53:42 2009 +++ docs/modules/open-1.06/open.pod Thu Apr 23 22:53:42 2009 @@ -0,0 +1,286 @@ + +=encoding euc-jp + +=head1 NAME + +=begin original + +open - perl pragma to set default PerlIO layers for input and output + +=end original + +open - 入出力のためのデフォルトの PerlIO 層をセットするための perl プラグマ + +=head1 SYNOPSIS + + use open IN => ":crlf", OUT => ":bytes"; + use open OUT => ':utf8'; + use open IO => ":encoding(iso-8859-7)"; + + use open IO => ':locale'; + + use open ':encoding(utf8)'; + use open ':locale'; + use open ':encoding(iso-8859-7)'; + + use open ':std'; + +=head1 DESCRIPTION + +=begin original + +Full-fledged support for I/O layers is now implemented provided +Perl is configured to use PerlIO as its IO system (which is now the +default). + +=end original + +Perl が IO システム(現在のデフォルト)として PerlIO を +使うように設定されている場合、I/O 層としての本格的な対応が +実装されています。 + +=begin original + +The C<open> 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. +Even three-argument opens may be affected by this pragma +when they don't specify IO layers in MODE. + +=end original + +C<open> プラグマはすべての I/O のデフォルトの「層」("layer") +(「ディシプリン」"disciplines"とも呼ばれます)を宣言するための +インターフェースの一つとして働きます。 +2 つの引数を取る open()、readpipe()(または qx//) と同様の演算子は、 +そのレキシカルスコープでこのプラグマを見つけると、宣言されたデフォルトを +使用します。 +3 つの引数を取る open でさえ、MODE に IO 層が指定されていない場合、 +このプラグマの影響を受けます。 + +=begin original + +With the C<IN> subpragma you can declare the default layers +of input streams, and with the C<OUT> subpragma you can declare +the default layers of output streams. With the C<IO> subpragma +you can control both input and output streams simultaneously. + +=end original + +C<IN> サブプラグマを使って入力ストリームのデフォルト層を宣言でき、 +C<OUT> サブプラグマを使って出力ストリームのデフォルト層を +宣言できます。 +C<IO> サブプラグマを使って入出力の両方を同時に制御できます。 + +=begin original + +If you have a legacy encoding, you can use the C<:encoding(...)> tag. + +=end original + +レガシーエンコーディングを使っているのなら、C<:encoding(...)> タグが +使えます。 + +=begin original + +If you want to set your encoding layers based on your +locale environment variables, you can use the C<:locale> tag. +For example: + +=end original + +ロケールに関する環境変数に基づいてエンコーディング層を設定したい場合、 +C<:locale> タグが使えます。 +例えば: + + $ENV{LANG} = 'ru_RU.KOI8-R'; + # the :locale will probe the locale environment variables like LANG + use open OUT => ':locale'; + open(O, ">koi8"); + print O chr(0x430); # Unicode CYRILLIC SMALL LETTER A = KOI8-R 0xc1 + close O; + open(I, "<koi8"); + printf "%#x\n", ord(<I>), "\n"; # this should print 0xc1 + close I; + +=begin original + +These are equivalent + +=end original + +以下のものは + + use open ':encoding(utf8)'; + use open IO => ':encoding(utf8)'; + +=begin original + +as are these + +=end original + +以下のものおよび + + use open ':locale'; + use open IO => ':locale'; + +=begin original + +and these + +=end original + +以下のものと等価です + + use open ':encoding(iso-8859-7)'; + use open IO => ':encoding(iso-8859-7)'; + +=begin original + +The matching of encoding names is loose: case does not matter, and +many encodings have several aliases. See L<Encode::Supported> for +details and the list of supported locales. + +=end original + +エンコーディング名のマッチングは緩やかなものです: 大小文字の違いは +無視され、多くのエンコーディングはいくつかの別名を持っています。 +対応しているロケールのリストと詳細は L<Encode::Supported> を +参照してください。 + +=begin original + +When open() is given an explicit list of layers (with the three-arg +syntax), they override the list declared using this pragma. + +=end original + +open() に層のリストが(3 引数文法で)与えられた場合、それらは +このプラグマを使って宣言されたリストを上書きします。 + +=begin original + +The C<:std> subpragma on its own has no effect, but if combined with +the C<:utf8> or C<:encoding> subpragmas, it converts the standard +filehandles (STDIN, STDOUT, STDERR) to comply with encoding selected +for input/output handles. For example, if both input and out are +chosen to be C<:encoding(utf8)>, a C<:std> will mean that STDIN, STDOUT, +and STDERR are also in C<:encoding(utf8)>. On the other hand, if only +output is chosen to be in C<< :encoding(koi8r) >>, a C<:std> will cause +only the STDOUT and STDERR to be in C<koi8r>. The C<:locale> subpragma +implicitly turns on C<:std>. + +=end original + +C<:std> サブプラグマそれ自身は何の効果ももちませんが、C<:utf8> や +C<:encoding> といったサブプラグマと組み合わせた場合には、 +標準ファイルハンドル(STDIN, STDOUT, STDERR)を、選択された入出力ハンドルの +エンコーディングに変換します。 +たとえば、入力と出力の両方で C<:encoding(utf8)> を選択した場合、 +C<:std> は STDIN, STDOUT, STDERR もまた +C<:encoding(utf8)> となることを意味します。 +一方、出力だけを C<< :encoding(koi8r) >> と選択した場合には、 +C<:std> は STDOUT と STDERR だけを C<koi8r> にします。 +C<:locale> サブプラグマは暗黙のうちに C<:std> を有効にします。 + +=begin original + +The logic of C<:locale> is described in full in L<encoding>, +but in short it is first trying nl_langinfo(CODESET) and then +guessing from the LC_ALL and LANG locale environment variables. + +=end original + +The logic of C<:locale> is described in full in L<encoding>, +but in short it is first trying nl_langinfo(CODESET) and then +guessing from the LC_ALL and LANG locale environment variables. +(TBT) + +=begin original + +Directory handles may also support PerlIO layers in the future. + +=end original + +ディレクトリハンドルも将来 PerlIO 層をサポートするでしょう。 + +=head1 NONPERLIO FUNCTIONALITY + +(非 PerlIO 機能) + +=begin original + +If Perl is not built to use PerlIO as its IO system then only the two +pseudo-layers C<:bytes> and C<:crlf> are available. + +=end original + +Perl がその IO システムとして PerlIO を使うように構築されていなかった場合、 +C<:bytes> と C<:crlf> の二つの擬似層だけが使用可能です。 + +=begin original + +The C<:bytes> layer corresponds to "binary mode" and the C<:crlf> +layer corresponds to "text mode" on platforms that distinguish +between the two modes when opening files (which is many DOS-like +platforms, including Windows). These two layers are no-ops on +platforms where binmode() is a no-op, but perform their functions +everywhere if PerlIO is enabled. + +=end original + +C<:bytes> 層は「バイナリモード」を、C<:crlf> 層は「テキストモード」を、 +ファイルをオープンするときにこれら二つのモードを区別する(Windows を +含めた多くの DOS に似たシステム) プラットフォームにおいて表します。 +これら二つの層は binmode() が何も行わないプラットフォームでは何も +行いませんが、PerlIO が有効である場合にはこれらの関数はすべての場所で +動作します。 + +=head1 IMPLEMENTATION DETAILS + +(実装の詳細) + +=begin original + +There is a class method in C<PerlIO::Layer> C<find> which is +implemented as XS code. It is called by C<import> to validate the +layers: + +=end original + +C<PerlIO::Layer> に、XS コードで実装された C<find> という +クラスメソッドがあります。 +これは層の確認のために C<import> によって呼び出されます: + + PerlIO::Layer::->find("perlio") + +=begin original + +The return value (if defined) is a Perl object, of class +C<PerlIO::Layer> which is created by the C code in F<perlio.c>. As +yet there is nothing useful you can do with the object at the perl +level. + +=end original + +返り値は、(もし定義されていれば) F<perlio.c> の C プログラムによって +作成された C<PerlIO::Layer> クラスの Perl オブジェクトです。 +perl レベルでは現在のところこれを使って何か便利なことが +できるわけではありません。 + +=head1 SEE ALSO + +L<perlfunc/"binmode">, L<perlfunc/"open">, L<perlunicode>, L<PerlIO>, +L<encoding> + +=begin meta + +Created: KIMURA Koichi (1.03) +Updated: Kentaro Shirakata <argra****@ub32*****> (1.06) + +=end meta + +=cut +