argra****@users*****
argra****@users*****
2014年 11月 30日 (日) 02:46:53 JST
Index: docs/perl/5.20.1/perlop.pod diff -u docs/perl/5.20.1/perlop.pod:1.1 docs/perl/5.20.1/perlop.pod:1.2 --- docs/perl/5.20.1/perlop.pod:1.1 Sat Oct 18 12:29:08 2014 +++ docs/perl/5.20.1/perlop.pod Sun Nov 30 02:46:53 2014 @@ -23,11 +23,9 @@ =end original -In Perl, the operator determines what operation is performed, -independent of the type of the operands. For example C<$a + $b> -is always a numeric addition, and if C<$a> or C<$b> do not contain -numbers, an attempt is made to convert them to numbers first. -(TBT) +Perl では、演算子はどんな演算を行うかをオペランドの型と独立して決定します。 +例えば C<$a + $b> は常に数値加算で、C<$a> や C<$b> に数値でないものが +含まれている場合、まずそれらを数値に変換しようとします。 =begin original @@ -39,12 +37,11 @@ =end original -This is in contrast to many other dynamic languages, where the -operation is determined by the type of the first argument. It also -means that Perl has two versions of some operators, one for numeric -and one for string comparison. For example C<$a == $b> compares -two numbers for equality, and C<$a eq $b> compares two strings. -(TBT) +これは、最初の引数の型によって演算が決定されるその他の多くの動的言語と +対照的です。 +これはまた、数値比較用と文字列比較用の 2 種類の演算子があるということです。 +例えば C<$a == $b> は二つの数値の等価性を比較し、C<$a eq $b> は二つの +文字列を比較します。 =begin original @@ -55,11 +52,10 @@ =end original -There are a few exceptions though: C<x> can be either string -repetition or list repetition, depending on the type of the left -operand, and C<&>, C<|> and C<^> can be either string or numeric bit -operations. -(TBT) +しかし、いくつかの例外があります: C<x> は左側のオペランドの型によって、 +文字列の繰り返しの場合とリストの繰り返しの場合があります; また +C<&>, C<|>, C<^> は文字列としてのビット演算と数値としてのビット演算の +場合があります。 =head2 Operator Precedence and Associativity X<operator, precedence> X<precedence> X<associativity> @@ -84,11 +80,10 @@ =end original -I<演算子の優先順位> とは、他の演算子より先に評価される演算子が -あるということです。 -例えば、C<2 + 4 * 5> の場合、乗算が高い優先順位を持っているので、 -C<4 * 5> が先に評価され、結果は C<6 * 5 == 30> ではなく、 -C<2 + 20 == 22> となります。 +I<演算子の優先順位> とは、他の演算子より先に評価される演算子があると +いうことです。 +例えば、C<2 + 4 * 5> の場合、乗算が高い優先順位を持っているので、C<4 * 5> が +先に評価され、結果は C<6 * 5 == 30> ではなく、C<2 + 20 == 22> となります。 =begin original @@ -103,8 +98,8 @@ I<演算子の結合性> は、同じ演算子が連続して現れた場合に何が起こるかを 定義します: 評価器が左側を先に評価するか右側を先に評価するかです。 -例えば、C<8 - 4 - 2> の場合、減算は左結合なので、Perl は式を左から -右に評価します。 +例えば、C<8 - 4 - 2> の場合、減算は左結合なので、Perl は式を左から右に +評価します。 C<8 - 4> が先に評価されるので、C<8 - 2 == 6> ではなく C<4 - 2 == 2> となります。 @@ -384,9 +379,9 @@ =end original C や C++ と同じように "C<< -> >>" は中置の被参照演算子です。 -右側が C<[...]>, C<{...}>, -C<(...)> のいずれかの形の添字であれば、左側は配列、ハッシュ、 -サブルーチンへのハードリファレンスかシンボリックリファレンスでなければなりません。 +右側が C<[...]>, C<{...}>, C<(...)> のいずれかの形の添字であれば、左側は配列、 +ハッシュ、サブルーチンへのハードリファレンスか +シンボリックリファレンスでなければなりません。 (あるいは技術的には、配列またはハードリファレンスが代入可能であれば ハードリファレンスを保持できる場所です。) L<perlreftut> と L<perlref> を参照してください。 @@ -413,10 +408,10 @@ =end original -The dereferencing cases (as opposed to method-calling cases) are -somewhat extended by the experimental C<postderef> feature. For the -details of that feature, consult L<perlref/Postfix Dereference Syntax>. -(TBT) +(メソッド呼び出しの場合ではなく) デリファレンスの場合、実験的な +C<後置デリファレンス> (postderef) 機能によっていくらか拡張されます。 +この機能の詳細については、L<perlref/Postfix Dereference Syntax> を +参照してください。 =head2 Auto-increment and Auto-decrement X<increment> X<auto-increment> X<++> X<decrement> X<auto-decrement> X<--> @@ -484,10 +479,10 @@ インクリメント演算子には、ちょっと風変わりな機能が組み込まれています。 数値が入った変数や、数値の文脈で使われてきた変数を インクリメントする場合には、通常のインクリメントとして動作します。 -しかし、その変数が設定されてからずっと文字列の文脈で -しか使われていなくて、空文字列でなく、 C</^[a-zA-Z]*[0-9]*\z/> にマッチする -値を持っているときには、個々の文字の範囲を保ちながら桁あげを行なって、 -文字列としてインクリメントが行なわれます (マジカルインクリメントと呼ばれます): +しかし、その変数が設定されてからずっと文字列の文脈でしか使われていなくて、 +空文字列でなく、 C</^[a-zA-Z]*[0-9]*\z/> にマッチする値を持っているときには、 +個々の文字の範囲を保ちながら桁あげを行なって、文字列としてインクリメントが +行なわれます (マジカルインクリメントと呼ばれます): print ++($foo = "99"); # prints "100" print ++($foo = "a0"); # prints "a1" @@ -570,8 +565,7 @@ 単項演算子の "-" は被演算子が数値または数値に見える文字列であれば、 算術否定を行ないます。 -被演算子が識別子ならば、マイナス記号にその識別子をつなげた -文字列が返されます。 +被演算子が識別子ならば、マイナス記号にその識別子をつなげた文字列が返されます。 これ以外で被演算子の最初の文字がプラスかマイナスのときには、 その記号を逆のものに置き換えた文字列を返します。 この規則の結果、-bareword が文字列 "-bareword" に等価となります。 @@ -680,8 +674,8 @@ 右引数は、検索パターン、置換、文字変換のいずれかです。 左引数は、デフォルトの $_ の代わりに検索、置換、文字変換の対象となるものです。 スカラコンテキストで使うと、返り値は一般的に演算の結果が成功したか否かです。 -例外は、C</r> (非破壊) オプション付きの置換 (s///) と文字変換 -(y///) です; この場合は変換した結果を返します。 +例外は、C</r> (非破壊) オプション付きの置換 (s///) と文字変換 (y///) です; +この場合は変換した結果を返します。 リストコンテキストでの振る舞いは演算子に依存します。 詳しくは L</"Regexp Quote-Like Operators"> を、これらの演算子を使った 例については L<perlretut> を参照して下さい。 @@ -820,9 +814,8 @@ =end original 二項演算子の "x" は繰り返し演算子です。 -スカラコンテキストまたは左辺値が括弧で括られていない場合は、 -左被演算子を右被演算子に示す数だけ繰り返したもので構成される -文字列を返します。 +スカラコンテキストまたは左辺値が括弧で括られていない場合は、左被演算子を +右被演算子に示す数だけ繰り返したもので構成される文字列を返します。 リストコンテキストでは、左被演算子が括弧で括られているか、C<qw/STRING> の 形のリストの場合、リストを繰り返します。 右オペランドが 0 か負数の場合、コンテキストによって、空文字列か空リストを @@ -1297,10 +1290,8 @@ これはほとんど L<perlsyn> で記述されている C<when> 構文で暗黙に使われますが、 C<when> 節だけがスマートマッチング演算子を呼び出すわけではありません。 全ての Perl の演算子の中で唯一、スマートマッチング演算子は再帰できます。 -The smartmatch -operator is L<experimental|perlpolicy/experimental> and its behavior is -subject to change. -(TBT) +スマートマッチング演算子は L<実験的|perlpolicy/experimental> で、その振る舞いは +変更されることがあります。 =begin original @@ -1359,15 +1350,38 @@ 実際に何が起こるかはほとんどの場合 2 番目のオペランドの型で決定されるので、 表は左ではなく右オペランドでソートされています。 +=begin original + Left Right Description and pseudocode =============================================================== Any undef check whether Any is undefined like: !defined Any +=end original + + 左 右 説明と擬似コード + =============================================================== + Any undef Any が未定義かどうか調べる + like: !defined Any + +=begin original + Any Object invoke ~~ overloading on Object, or die +=end original + + Any Object Object に対する ~~ オーバーロードを起動するか die + +=begin original + Right operand is an ARRAY: +=end original + + 右被演算子が 配列: + +=begin original + Left Right Description and pseudocode =============================================================== ARRAY1 ARRAY2 recurse on paired elements of ARRAY1 and ARRAY2[2] @@ -1382,8 +1396,32 @@ Any ARRAY smartmatch each ARRAY element[3] like: grep { Any ~~ $_ } ARRAY +=end original + + 左 右 説明と擬似コード + =============================================================== + ARRAY1 ARRAY2 ARRAY1 と ARRAY2 の組の要素に対して再帰 [2] + like: (ARRAY1[0] ~~ ARRAY2[0]) + && (ARRAY1[1] ~~ ARRAY2[1]) && ... + HASH ARRAY いずれかの ARRAY 要素が HASH キーに存在するか + like: grep { exists HASH->{$_} } ARRAY + Regexp ARRAY いずれかの ARRAY 要素が Regexp でマッチングするか + like: grep { /Regexp/ } ARRAY + undef ARRAY ARRAY 内の undef + like: grep { !defined } ARRAY + Any ARRAY それぞれの ARRAY 要素に対してスマートマッチング [3] + like: grep { Any ~~ $_ } ARRAY + +=begin original + Right operand is a HASH: +=end original + + 右被演算子がハッシュ: + +=begin original + Left Right Description and pseudocode =============================================================== HASH1 HASH2 all same keys in both HASHes @@ -1398,8 +1436,32 @@ Any HASH HASH key existence like: exists HASH->{Any} +=end original + + 左 右 説明と擬似コード + =============================================================== + HASH1 HASH2 HASH1 と HASH2 両方が全て同じキー + like: keys HASH1 == + grep { exists HASH2->{$_} } keys HASH1 + ARRAY HASH いずれかの ARRAY 要素が HASH キーに存在するか + like: grep { exists HASH->{$_} } ARRAY + Regexp HASH いずれかの HASH キーが Regexp でマッチングするか + like: grep { /Regexp/ } keys HASH + undef HASH 常に偽 (undef はキーになれない) + like: 0 == 1 + Any HASH HASH キーが存在するか + like: exists HASH->{Any} + +=begin original + Right operand is CODE: +=end original + + 右被演算子がコードリファレンス: + +=begin original + Left Right Description and pseudocode =============================================================== ARRAY CODE sub returns true on all ARRAY elements[1] @@ -1409,13 +1471,26 @@ Any CODE sub passed Any returns true like: CODE->(Any) +=end original + + 左 右 説明と擬似コード + =============================================================== + ARRAY CODE 全ての ARRAY 要素に対してサブルーチンが真を返す [1] + like: !grep { !CODE->($_) } ARRAY + HASH CODE 全ての HASH キーに対してサブルーチンが真を返す [1] + like: !grep { !CODE->($_) } keys HASH + Any CODE サブルーチンに Any を渡して真を返す + like: CODE->(Any) + =begin original Right operand is a Regexp: =end original -右オペランドは正規表現: +右被演算子が正規表現: + +=begin original Left Right Description and pseudocode =============================================================== @@ -1426,13 +1501,41 @@ Any Regexp pattern match like: Any =~ /Regexp/ +=end original + + 左 右 説明と擬似コード + =============================================================== + ARRAY Regexp いずれかの ARRAY 要素が Regexp にマッチングするか + like: grep { /Regexp/ } ARRAY + HASH Regexp いずれかの HASH キーが Regexp にマッチングするか + like: grep { /Regexp/ } keys HASH + Any Regexp パターンマッチング + like: Any =~ /Regexp/ + +=begin original + Other: +=end original + + その他: + +=begin original + Left Right Description and pseudocode =============================================================== Object Any invoke ~~ overloading on Object, or fall back to... +=end original + + 左 右 説明と擬似コード + =============================================================== + Object Any Object に対して ~~ のオーバーロードを起動、 + あるいは次にフォールバック… + +=begin original + Any Num numeric equality like: Any == Num Num nummy[4] numeric equality @@ -1442,6 +1545,17 @@ Any Any string equality like: Any eq Any +=end original + + Any Num 数値の等価性 + like: Any == Num + Num nummy[4] 数値の等価性 + like: Num == nummy + undef Any 未定義かどうかを調べる + like: !defined(Any) + Any Any 文字列の等価性 + like: Any eq Any + =begin original Notes: @@ -1455,22 +1569,22 @@ =item 1. Empty hashes or arrays match. -(空ハッシュや配列はマッチングします。) +(1. 空ハッシュや配列はマッチングします。) =item 2. That is, each element smartmatches the element of the same index in the other array.[3] -(つまり、それぞれの要素は他の配列の同じインデックスの要素とスマートマッチングします。[3]) +(2. つまり、それぞれの要素は他の配列の同じインデックスの要素とスマートマッチングします。[3]) =item 3. If a circular reference is found, fall back to referential equality. -(循環参照が見つかると、参照の透過性にフォールバックします。) +(3. 循環参照が見つかると、参照の透過性にフォールバックします。) =item 4. Either an actual number, or a string that looks like one. -(実際の数値か、数値に見える文字列のどちらかです。) +(4. 実際の数値か、数値に見える文字列のどちらかです。) =back @@ -1558,8 +1672,7 @@ =end original 二つの配列は、最初の配列のそれぞれの要素が、二つ目の配列の対応する要素に -(つまり "in") 再帰的にスマートマッチングするときに、 -スマートマッチングします。 +(つまり "in") 再帰的にスマートマッチングするときに、スマートマッチングします。 use v5.10.1; my @little = qw(red blue green); @@ -1753,8 +1866,7 @@ =end original -は C<I<X>> を引数としてオーバーロードメソッドを起動 I<しない> という -ことです。 +は C<I<X>> を引数としてオーバーロードメソッドを起動 I<しない> ということです。 通常通り前述の表を見て C<I<X>> の型に依存するのではなく、オーバーロードは 起動されるかもしれませんし、されないかもしれません。 単純な文字列や数値については、以下と等価になります: @@ -1804,11 +1916,9 @@ 二項演算子の "&" は、両オペランドのビットごとに論理積をとって、 その結果を返します。 -Although no -warning is currently raised, the result is not well defined when this operation -is performed on operands that aren't either numbers (see -L<Integer Arithmetic>) or bitstrings (see L<Bitwise String Operators>). -(TBT) +数値 (L<Integer Arithmetic>) 参照) でもビット文字列 +(L<Bitwise String Operators> 参照) でもないオペランドに対してこの演算を +実行した場合、現在のところ警告は出ませんが、結果は未定義です。 =begin original @@ -1855,11 +1965,9 @@ =end original -Although no warning is currently raised, the results are not well -defined when these operations are performed on operands that aren't either -numbers (see L<Integer Arithmetic>) or bitstrings (see L<Bitwise String -Operators>). -(TBT) +数値 (L<Integer Arithmetic>) 参照) でもビット文字列 +(L<Bitwise String Operators> 参照) でもないオペランドに対してこれらの演算を +実行した場合、現在のところ警告は出ませんが、結果は未定義です。 =begin original @@ -2369,12 +2477,9 @@ しかし、小文字のギリシャ文字はここに書いたものよりも I<たくさん> あるので、 正規表現で小文字のギリシャ文字にマッチングさせるためには、 -C</(?:(?=\p{Greek})\p{Lower})+/> というパターン -(or the -L<experimental feature|perlrecharclass/Extended Bracketed Character -Classes> C<S</(?[ \p{Greek} & \p{Lower} ])+/>>) -を使います。 -(TBT) +C</(?:(?=\p{Greek})\p{Lower})+/> というパターン (または +L<実験的機能|perlrecharclass/Extended Bracketed Character Classes> である +C<S</(?[ \p{Greek} & \p{Lower} ])+/>>) を使います。 =begin original @@ -3329,11 +3434,9 @@ ASCII プラットフォームでは、上述の一覧からの結果の文字は ASCII 制御文字の 完全な集合です。 -これは EBCDIC プラットフォームには当てはまりません; -for a full discussion of the -differences between these for ASCII versus EBCDIC platforms +これは EBCDIC プラットフォームには当てはまりません; これに関する +ASCII プラットフォームと EBCDIC プラットフォームとの違いの完全な議論については L<perlebcdic/OPERATOR DIFFERENCES> を参照してください。 -(TBT) =begin original @@ -3586,11 +3689,8 @@ テーブルは Unicode で定義されているものになります。 これは、単一の文字の大文字小文字マッピングは複数の文字を生成することが あるということです。 -C<use locale> の基では、C<\F> は -for all locales but a UTF-8 one, where it instead uses the Unicode -definition -C<\L> と同じ結果を生成します。 -(TBT) +C<use locale> の基では、C<\F> は、Unicode の定義が使われる UTF-8 以外の +全てのロケールにおいて、C<\L> と同じ結果を生成します。 =begin original @@ -3620,9 +3720,8 @@ 協力して保存しようとすると言うのは単なる幻想です。 全てのシステムで C<"\r"> を ASCII CR として、また C<"\n"> を ASCII LF として読み込むわけではありません。 -例えば昔の Mac (MacOS X 以前)ではこれらは保存され、 -行端末子のないシステムでは、 -C<"\n"> を print しても実際のデータは何も出力しません。 +例えば昔の Mac (MacOS X 以前)ではこれらは保存され、行端末子のない +システムでは、C<"\n"> を print しても実際のデータは何も出力しません。 一般に、システムで "newline" を意味したいときには C<"\n"> を使いますが、 正確な文字が必要な場合はリテラルな ASCII を使います。 例えば、ほとんどのネットワークプロトコルでは行端末子として @@ -4324,6 +4423,8 @@ 以下は段落内の文をチェックするためのもう一つの方法です: +=begin original + my $sentence_rx = qr{ (?: (?<= ^ ) | (?<= \s ) ) # after start-of-string or # whitespace @@ -4349,6 +4450,29 @@ } } +=end original + + my $sentence_rx = qr{ + (?: (?<= ^ ) | (?<= \s ) ) # 文字列の先頭か空白の後 + \p{Lu} # 大文字 + .*? # なんでも + (?<= \S ) # 空白以外で終わる + (?<! \b [DMS]r ) # しかし一般的な省略形ではない + (?<! \b Mrs ) + (?<! \b Sra ) + (?<! \b St ) + [.?!] # 引き続いて文を終わらせるものが + (?= $ | \s ) # 文字列の末尾か空白の前に + }sx; + local $/ = ""; + while (my $paragraph = <>) { + say "NEW PARAGRAPH"; + my $count = 0; + while ($paragraph =~ /($sentence_rx)/g) { + printf "\tgot sentence %d: <%s>\n", ++$count, $1; + } + } + =begin original Here's how to use C<m//gc> with C<\G>: @@ -7342,7 +7466,7 @@ Translate: 吉村 寿人 <JAE00****@nifty*****> (5.000) Update: Kentaro Shirakata <argra****@ub32*****> (5.6.1-) -Status: in progress +Status: completed =end meta