argra****@users*****
argra****@users*****
2008年 5月 29日 (木) 22:35:20 JST
Index: docs/perl/5.10.0/perlfaq4.pod diff -u docs/perl/5.10.0/perlfaq4.pod:1.3 docs/perl/5.10.0/perlfaq4.pod:1.4 --- docs/perl/5.10.0/perlfaq4.pod:1.3 Thu May 22 05:32:28 2008 +++ docs/perl/5.10.0/perlfaq4.pod Thu May 29 22:35:19 2008 @@ -41,12 +41,11 @@ 内部的には、あなたの使っているコンピュータは浮動小数点数を 2 進数を 使って表現しています。 -Digital (as in powers of two) computers cannot store all numbers -exactly. +(2 のべき乗のような) デジタルなコンピュータは全ての数値を正確に +保管することはできません。 実数は処理中に精度が落ちることがあります。 これはコンピュータがどのように数値を保管するかの問題で、Perl だけではなく 全てのコンピュータ言語に影響を与えます。 -(TBT) =begin original @@ -194,12 +193,10 @@ =end original -Surely C<chmod(01204, $file);> を意図してないはずです - ですよね? +きっと C<chmod(01204, $file);> は意図してないはずです - ですよね? chmod() などでの引数として数値リテラルを使いたい場合は、 -then please -try to express them as octal constants, that is with a leading zero and -with the following digits restricted to the set C<0..7>. -(TBT) +先頭に 0 をつけ、その後に C<0..7> の数値が続く 8 進定数を使うように +してください。 =head2 Does Perl have a round() function? What about ceil() and floor()? Trig functions? @@ -873,10 +870,8 @@ =end original C<rand($x)> は C<< 0 <= rand($x) < $x >> という値を返します。 -Thus -what you want to have perl figure out is a random number in the range -from 0 to the difference between your I<X> and I<Y>. -(TBT) +従って、perl に作ってほしいものは、0 から、必要な I<X> と I<Y> との差 +までの範囲の乱数です。 =begin original @@ -2027,10 +2022,8 @@ =end original 置換を使うことで行えます。 -A substitution can do this for you. For a single line, you want to -replace all the leading or trailing whitespace with nothing. You -can do that with a pair of substitutions. -(TBT) +1 行では、先頭か末尾のどちらかの空白全てを削除します。 +2 つの置換でこれが行えます。 s/^\s+//; s/\s+$//; @@ -2043,10 +2036,9 @@ =end original -You can also write that as a single substitution, although it turns -out the combined statement is slower than the separate ones. That -might not matter to you, though. -(TBT) +これを 1 回の置換で書くこともできますが、組み合わせた文は分かれている +文よりも遅くなります。 +しかし、それはあなたには問題がないかもしれません。 s/^\s+|\s+$//g; @@ -2876,9 +2868,7 @@ =end original -You can write this more briefly using a grep, which does the -same thing. -(TBT) +grep を使うことでより簡単に書くこともでき、これは同じことになります。 my %seen = (); my @unique = grep { ! $seen{ $_ }++ } @array; @@ -3175,11 +3165,9 @@ =end original -To find the first array element which satisfies a condition, you can -use the C<first()> function in the C<List::Util> module, which comes -with Perl 5.8. +条件を満たす最初の配列要素を探すためには、Perl 5.8 から同梱されている +C<List::Util> モジュールの C<first()> 関数が使えます。 この例は "Perl" を含む最初の要素を探します。 -(TBT) use List::Util qw(first); @@ -3566,8 +3554,7 @@ =end original -For even faster execution, you could do: -(TBT) +より速い実行のために、以下のようにも出来ます: use Algorithm::Permute; @@ -4040,9 +4027,8 @@ =end original -The C<each> operator returns the pairs in apparently random order, so if -ordering matters to you, you'll have to stick with the C<keys> method. -(TBT) +C<each> 演算子は組を一見ランダムな順序で返すので、順序が問題になる場合は、 +C<keys> メソッドを使う必要があります。 =begin original @@ -4201,7 +4187,7 @@ =end original ハッシュをソートするために、キーから始めます。 -In this example, we give the list of +この例では、we give the list of keys to the sort function which then compares them ASCIIbetically (which might be affected by your locale settings). The output list has the keys in ASCIIbetical order. Once we have the keys, we can go through them to Index: docs/perl/5.10.0/perlfaq5.pod diff -u docs/perl/5.10.0/perlfaq5.pod:1.1 docs/perl/5.10.0/perlfaq5.pod:1.2 --- docs/perl/5.10.0/perlfaq5.pod:1.1 Sat Apr 5 04:46:29 2008 +++ docs/perl/5.10.0/perlfaq5.pod Thu May 29 22:35:19 2008 @@ -56,10 +56,9 @@ デバイスへ送出するので、バイト単位のシステムコールはありません。 大部分のstdioの実装では、バッファリングの方式とバッファのサイズは デバイスの型に従ったものになっています。 -Perl's C<print()> and -C<write()> functions normally buffer output, while C<syswrite()> -bypasses buffering all together. -(TBT) +Perl の C<print()> 関数と C<write()> 関数は通常出力を +バッファリングしますが、C<syswrite()> 関数はバッファリングを +バイパスします。 =begin original @@ -91,9 +90,8 @@ =end original -Use C<select()> to choose the desired handle, then set its -per-filehandle variables. -(TBT) +目的のハンドルを選択するために C<select()> を使い、それからその +ファイルハンドル単位の変数をセットします。 $old_fh = select(OUTPUT_HANDLE); $| = 1; @@ -575,10 +573,9 @@ =end original -Use the File::Copy module. It comes with Perl and can do a -true copy across file systems, and it does its magic in -a portable fashion. -(TBT) +File::Copy モジュールをつかいましょう。 +これは Perl に同梱されていて、ファイルシステム間で真のコピーが行われ、 +移植性の面での細工がされています。 use File::Copy; @@ -1098,9 +1095,8 @@ =end original -With older versions of Perl, the C<IO::String> module provides similar -functionality. -(TBT) +Perl のより古いバージョンでは、C<IO::String> モジュールが似たような機能を +提供します。 =head2 How can I output my numbers with commas added? X<number, commify> @@ -1150,8 +1146,7 @@ =end original -This regex from Benjamin Goldberg will add commas to numbers: -(TBT) +Benjamin Goldberg による正規表現は数値にカンマを追加します: s/(^[-+]?\d+?(?=(?>(?:\d{3})+)(?!\d))|\G\d{3}(?=\d))/$1,/g; @@ -1161,8 +1156,7 @@ =end original -It is easier to see with comments: -(TBT) +コメント付きで見ればより簡単になります: s/( ^[-+]? # beginning of number. @@ -1949,7 +1943,7 @@ =end original POSIX::strftime()アプローチは理論的にはロカール非依存で、 -使う価値があります。詳しくはL<perlolcale>を参照してください。 +使う価値があります。詳しくはL<perllocale>を参照してください。 =head2 How do I set a file's timestamp in perl? X<timestamp> X<file, timestamp> @@ -2024,9 +2018,8 @@ =end original -To connect one filehandle to several output filehandles, -you can use the IO::Tee or Tie::FileHandle::Multiplex modules. -(TBT) +一つのファイルハンドルを複数の出力ファイルハンドルに接続するには、 +IO::Tee や Tie::FileHandle::Multiplex のモジュールが使えます。 =begin original @@ -2454,10 +2447,8 @@ =end original -これでもうまく行かなければ、 -look into the C<clearerr> method -from C<IO::Handle>, which resets the error and end-of-file states -on the handle. +これでもうまく行かなければ、C<IO::Handle> の C<clearerr> メソッドを +検討してください; これはハンドルのエラーと end-of-file 状態をリセットします。 (TBT) =begin original @@ -2733,9 +2724,9 @@ =end original -Another way is to use the Tie::File module, which treats the entire -file as an array. Simply access a random array element. -(TBT) +もう一つの方法は Tie::File モジュールを使うことで、これはファイル全体を +配列として扱います。 +単にランダムな配列にアクセスしてください。 =head2 Why do I get weird spaces when I print an array of lines? Index: docs/perl/5.10.0/perltooc.pod diff -u docs/perl/5.10.0/perltooc.pod:1.1 docs/perl/5.10.0/perltooc.pod:1.2 --- docs/perl/5.10.0/perltooc.pod:1.1 Thu May 29 00:41:30 2008 +++ docs/perl/5.10.0/perltooc.pod Thu May 29 22:35:19 2008 @@ -1508,13 +1508,13 @@ =end original -パッケージの名前のハッシュはクラスごとに、グローバルな状態のデータを -ただ持つ以上に、使うことができます。 +パッケージの名前のハッシュは、単にクラス単位のグローバルな状態のデータを +持つこと以上のことに使えます。 オブジェクト属性のデフォルトの設定を持つ、一種のテンプレートとしての役目も 出来ます。 これらのデフォルトの設定は、コンストラクタで、特定のオブジェクトの初期化の ために使うことができます。 -クラスの名前のハッシュは、I<半透明の属性>を実装するのにも使うことも出来ます。 +クラスの名前のハッシュは、I<半透明の属性> を実装するのにも使えます。 半透明の属性とは、クラスワイドのデフォルトを持つ属性です。 それぞれのオブジェクトは属性にそれ自身の値をセットできます、 そこでは、C<< $object->attribute() >> で、値を返します。 @@ -1540,10 +1540,13 @@ これらの属性からただ、値を取りだしているならば、半透明性を得ます。 ですが、これらの属性に新しい値を蓄えるなら、新しい値は現在のオブジェクトに セットされます。 -他方で、クラスをオブジェクトとして使い、直接にクラスで属性値を蓄えるなら、 -メタオブジェクトの値が変更し、その後で、それらの属性が初期化されていない値で -オブジェクトで作業を取ると、メタオブジェクトの新しい値を -取り出すでしょう(訳註:訳怪しい)。 +一方、クラスをオブジェクトとして使い、直接にクラスで属性値を蓄えるなら、 +メタオブジェクトの値が変更され、その後で、それらの属性の値がが +初期化されていないオブジェクトで取り出し操作を行うと、 +メタオブジェクトの新しい値を取り出すことになります。 +Objects with their own initialized values, however, won't +see any change. +(TBT) =begin original @@ -2178,21 +2181,21 @@ 何か他のようなアクセサメソッドを使う自分自身のクラスを必要とすることは、 おそらく良い事です。ですが、他のもの全て、サブクラス、スーパークラス、 敵味方、全てが、仲介を通してあなたのオブジェクトにくるのを、 -要求したり、予期したりすることは、良い考えを超えるものです。 +要求したり、予期したりすることは、単なる良い考えを超えるものです。 これは、そのモデルにとって全く重要です。 "public" データも、"protected" データも、どちらも、 そのようなものは心の中からなくしましょう。 それらは、魅惑的ですが、詰まるところ、有害な考えです。 両方とも、戻って来て、あなたに噛みつくでしょう。 全ての状態が完全にプライベートだと考えられ、それ自身のアクセサメソッドの -観点から保存される、 -安定した位置から外れるとすぐに、そのエンベロープを破ることになるからです。 +観点から保存される、安定した位置から外れるとすぐに、そのエンベロープを +破ることになるからです。 カプセル化されているエンベロープに穴を開けていると、 -未来の実装の変更が関係ないコードを壊す時、誰かが代価を払うことは、間違いない。 -この不完全な結果を避ける考えは、まさに、最初の場所でオブジェクトの -オリエンテーションを始めることで、卑屈な抽象化のスリングと弓の被害を被るのに -同意する理由です。 -そのような破損は極端に不運のようです(訳註:よくわからない)。 +未来の実装の変更が関係ないコードを壊す時、誰かが代価を払うことは、 +間違いありません。 +この不完全な結果を避ける考えは、まさに、最初の場所でオブジェクト志向に +変化することによる卑屈な抽象化の批判を被るのに納得する理由であり、 +そのような破損はとても残念なことに思えます。 =head2 More Inheritance Concerns @@ -2360,7 +2363,7 @@ =end original このことは、あなたがどれくらい注意深くありたいかに依存します。 -Cosmoクラスに戻って、考えてください。 +Cosmo クラスに戻って、考えてください。 &supernova メソッドが直接に、$Cosmos::Starts か、 C<$colsmos::Cosmos{stars}> を変更していたら、Multiverse を考案するときに、 クラスを再利用することができなかったでしょう。 @@ -2417,7 +2420,7 @@ =end original -誰も-- 絶対に誰も -- クラス属性に、支配しているアクセサメソッドの +誰も -- 絶対に誰も -- クラス属性に、支配しているアクセサメソッドの 仲介なしには、クラス属性を読み書きすることを許されていません。 メソッドだけが、支配ているレキシカル変数にアクセスするからです。 この、クラス属性への仲介するアクセスの使用は、ほとんどの、オブジェクト指向 @@ -2432,8 +2435,8 @@ =end original データごとの アクセサメソッドを作成するために使用される、コードを -反復するのは、不精を苛立だせます。 -ですので、似たようなメソッドを作成するのに、再びクロージャを使用しましょう。 +反復するのは、不精を苛立だせるので、 +似たようなメソッドを作成するのに、再びクロージャを使用しましょう。 package Some_Class; @@ -2496,7 +2499,7 @@ =end original -2 つ目のクラスの名前のハッシュを避けたいと思う理由があります。 +ここに、クラスの名前のハッシュを避けたいと思う 2 つ目の理由があります。 それらに、ダブルコロンのクラス名を使うと、 つつくつもりのないどこかを、結局、つつくことになるでしょう。 @@ -2526,11 +2529,11 @@ パッケージのハッシュを得ました。 ですが、次のケースでは、現在のパッケージのハッシュを得る代わりに、 Vermin パッケージの、ハッシュ %Noxious を得ました。 -(有害な社会の害虫は、他のパッケージに侵入し、そのまわりに、自分のデータを -広げます :-) Perlは、その名前の慣例に、関連のあるパッケージを +(有毒な害虫は、他のパッケージに侵入し、そのまわりに、自分のデータを +撒き散らします :-) Perl の命名仕様は、相対パッケージを サポートしません。 ですので、ダブルコロンは、現在のパッケージの中を見るだけではなく、 -完全修飾されたルックアップを引き起こします。 +完全修飾された検索を引き起こします。 =begin original Index: docs/perl/5.10.0/perltoot.pod diff -u docs/perl/5.10.0/perltoot.pod:1.1 docs/perl/5.10.0/perltoot.pod:1.2 --- docs/perl/5.10.0/perltoot.pod:1.1 Mon May 26 03:46:52 2008 +++ docs/perl/5.10.0/perltoot.pod Thu May 29 22:35:20 2008 @@ -42,17 +42,18 @@ =end original -オブジェクトは、きちんとした小さな使いやすい包みに包んで、 -複雑なふるまいを遠くへやってしまう方法以外のなにものでもありません -(専門家は、このことを抽象化と呼びます)。 +オブジェクトは、きちんとした小さな使いやすい包みに包んで、複雑なふるまいを +遠くへやってしまう方法以外のなにものでもありません。 +(専門家は、このことを抽象化と呼びます。) 本当に難しい問題を片付けようと、何週間もぼーっと過ごしている、 かしこい人たちは、普通の人でも使える、これらの素敵なオブジェクトを -作ります(専門家は、このことをソフトウェアの再利用と呼びます)。 +作ります。 +(専門家は、このことをソフトウェアの再利用と呼びます。) オブジェクトを使う人(たぶん、プログラマ)は、自分が欲しい小さな包みを -いじることができます。 -ですが、その包みを開けようとはしないし、その中を散らかそうともしないでしょう。 -ちょうど、ハードウェアの高価な部分のように、契約は次のようになっています。 -カバーをいじくれば、保証は無効になります、と。 +いじることができますが、その包みを開けて、中身にちょっかいを +出そうとはしません。 +ちょうど、ハードウェアの高価な部分のように、契約は次のようになっています; +「カバーをいじくれば、保証は無効になります。」 ですから、そんなことをしてはいけません。 =begin original @@ -66,14 +67,14 @@ =end original -オブジェクトの核心は、クラスです。 -クラスは、守られた小さな私的な名前空間であり、データと関数に満ちています。 -クラスは関連したルーチンのセットであり、いくつかの問題領域を扱います。 +オブジェクトの核心は、クラスです; これは守られた小さな私的な +名前空間であり、データと関数が詰まっています。 +クラスはいくつかの問題領域を扱う関連したルーチンの集合です。 クラスをユーザ定義の型と考えることもできます。 -Perl のパッケージの仕組は、より伝統的なモジュールと同じように、 +Perl のパッケージの仕組みは、より伝統的なモジュールと同じように、 クラスモジュールにも使われます。 -オブジェクトは、クラスの中に、 "住んで(生きて)"います。 -このことは、オブジェクトがいくつかのパッケージに属していることを意味します。 +オブジェクトは、クラスの中に、 "住んで(生きて)"います; つまり、 +オブジェクトがいくつかのパッケージに属していることを意味します。 =begin original @@ -97,11 +98,10 @@ "オブジェクトをちょうだい"のように、頼むか、 オブジェクトの 1 つに何かをするように頼むことができます。 クラスに何かをするように頼むことは、I<クラスメソッド> を呼ぶことです。 -オブジェクトに何かをするように頼むことは、I<オブジェクトメソッド>を +オブジェクトに何かをするように頼むことは、I<オブジェクトメソッド> を 呼ぶことです。 クラス(ふつう)または、オブジェクト(たまに)に、オブジェクトを返すように -頼むことは、I<コンストラクタ>を呼ぶことです。 -コンストラクタは、メソッドの一種です。 +頼むことは、単にメソッドの一種である I<コンストラクタ> を呼ぶことです。 =begin original @@ -217,7 +217,7 @@ このモジュールに Exporter は使わないでおきましょう。 私たちは行儀が良いし、行儀が良いクラスモジュールはまったく何も -export しないからです(訳註:文法が?)。 +export しないからです。 オブジェクトを作るためには、クラスに、I<コンストラクタメソッド> が必要です。 コンストラクタは、普通のデータ型ではなく、おろしたてのクラスのオブジェクトを 返します。 @@ -320,11 +320,11 @@ =end original -これと同じモデルは、複数のクラスでよく使われてます。 +これと同じモデルは、複数のクラスでよく使われてますが、 とはいっても、クラスの外から、皆がオブジェクトにワルツを踊らせて、 そのデータメンバにずうずうしく直接にアクセスすることは、 プログラミングの礼儀正しさの頂点をよく考えたものではありません。 -概して、オブジェクトは、I<オブジェクトメソッド>を使ってアクセスする、 +概して、オブジェクトは、I<オブジェクトメソッド> を使ってアクセスする、 不可解なクッキーと考えるべきです。 見た目には、メソッドは、ブラケットや、ブレイスの代わりに、 関数名を使って、リファレンスをデリファレンスしているように見えます。 @@ -349,7 +349,7 @@ 提供しているものもありますが、Perl は、そうではありません。 使う人がそれぞれのクラスのドキュメントを読むのを当てにしています。 定義されていないメソッドをオブジェクトで呼んだら、Perl は、文句を -言おうとはしませんが、プログラムは、実行している間に、例外をおこすでしょう。 +言おうとはしませんが、プログラムは、実行中に例外をおこすでしょう。 同じように、引数に素数を期待するメソッドに、素数でない数字を引数にして 呼んだとしても、コンパイラがそのことをとらえてくれることは期待できません。 (たぶん、あなたは、コンパイラにあなたの好むすべてを期待するでしょうが、 @@ -398,7 +398,7 @@ =end original 上のように、そのクラスを使う人は、オブジェクトにある特定の実装があるか、 -他の実装があるかを知りません(すくなくとも、その事実に注意を払うかは +他の実装があるかを知りません(少なくとも、その事実に注意を払うかは 無関係です)。 クラスとそのオブジェクトへのインターフェースは、専らメソッド経由です。 そして、クラスを使う人はみんな、メソッドをいじるべきです。 @@ -746,7 +746,7 @@ Perl は、誰がどのメソッドを使えるかの制限を押しつけません。 パブリック と プライベート の違いは慣例によるもので、構文にはよりません。 -(たぶん、L<変数としてのデータメンバ> に、下の方で記述する Alias モジュールを +(たぶん、L<Data Members as Variables> に、下の方で記述する Alias モジュールを 使わない場合は)。 メソッドの名前が一つか、2 つののアンダースコアで始まっているか、 終わっているものを見ることがあるでしょう。 @@ -2172,12 +2172,12 @@ =end original 実際には、多重継承が使われているクラスモジュールは、ほとんどみかけません。 -ほとんどいつも、多重継承の上の別のものの中の、 -単純な一つのクラスを積んだコンテナ船を選びます。 -Person オブジェクトは、Fullname オブジェクトを I<積んだ> -オブジェクトだからです。 -それが一つで I<あった> というわけではありません。 -(訳註:謎) +ほとんどいつも、多重継承ではなく、一つのクラスは他の一つのクラスに +含まれているという単純なコンテナ関係を選びます。 +これが、なぜ Person オブジェクトは、Fullname オブジェクトを I<含んでいる> か +という理由です。 +これは、Person オブジェクトが Fullname オブジェクトで I<あった> ということを +意味しません。 =begin original @@ -2747,14 +2747,14 @@ (訳註:圧倒的に違うのは、)オブジェクトがコードリファレンスの背後に 隠されているからです。 -このことはちょっとミステリアスです。 -関数的なプログラム言語よりも、標準的な手続き型や、オブジェクトベースの -プログラミング言語の方が、そういった背景が、クロージャの由来するところから、 -よりしっかりと定着しているからです(訳註:?)。 +このことはちょっとミステリアスです; +クロージャの由来する関数型プログラミング言語よりも、 +標準的な手続き型や、オブジェクトベースのプログラミング言語の方に +よりしっかり根付いているからです。 new() メソッドで作られて、返されたオブジェクトは、今まで見てきたような、 データのリファレンスではありません。 オブジェクトは、匿名のコードリファレンスであり、内部に、特定の -バージョン(レキシカルにバインドしており、例示している(訳註:?))の +バージョン(レキシカルにバインドしており、インスタンス化している)の - プライベートな変数 $selfに蓄えられた - オブジェクトデータにアクセスする コードを持っています。 それは、毎回、同じ関数であるにもかかわらず、違ったバージョンの $self を @@ -2874,10 +2874,9 @@ =end original オートロードは、未定義のメソッドの呼び出しをインターセプトする方法です。 -オートロードルーチンは、オン・ザ・フライに、新しい関数 - ディスクから +オートロードルーチンは、その場で、新しい関数 - ディスクから ロードされるか、たぶんevalされているもの - を作ることを選ぶかもしれません。 -このオン・ザ・フライに定義する作戦が、 -オートローディング(訳註:自動装填?)と呼ばれる理由です。 +この「その場で定義する」戦略が、オートローディングと呼ばれる理由です。 =begin original @@ -2913,12 +2912,12 @@ 探します。 もし、AUTOLOAD があれば、元の関数が持っていたのと同じ引数で、それが 呼ばれます。 -その関数の完全な正規の名前(訳註:パッケージ名で修飾された関数名)は、 -パッケージのグローバル変数 $AUTOLOAD に蓄えられます。 -いったん呼ばれると、関数は、好きなように何かをすることが出来ます。 +その関数の完全修飾名は、パッケージのグローバル変数 $AUTOLOAD に +蓄えられます。 +いったん呼ばれると、関数は、好きなように何かをすることが出来ます; 適当な名前で、新しい関数を定義すること、実際に装飾的な一種の、C<goto>を、 それに対して正しく行うこと、コールスタックからそれ自身を消すことを、 -含みます(訳註:謎)。 +含みます。 =begin original