argra****@users*****
argra****@users*****
2008年 5月 31日 (土) 05:53:33 JST
Index: docs/perl/5.10.0/perlfaq6.pod diff -u docs/perl/5.10.0/perlfaq6.pod:1.1 docs/perl/5.10.0/perlfaq6.pod:1.2 --- docs/perl/5.10.0/perlfaq6.pod:1.1 Tue Apr 8 04:07:54 2008 +++ docs/perl/5.10.0/perlfaq6.pod Sat May 31 05:53:32 2008 @@ -22,7 +22,8 @@ =end original -この章は驚くほど小さくなっています。なぜならFAQの残りの部分は +この章は驚くほど小さくなっています。 +なぜならFAQの残りの部分は 正規表現を伴った回答と一緒にあちこちに散在しているからです。 たとえばURLをデコードするとかあるものが数値かどうか確認することは 正規表現を使って処理されますが、この回答はこの資料のあらゆる所で @@ -81,7 +82,8 @@ <CODE>/x</CODE> 修飾子は、正規表現中にある空白を無視するようにし、 (キャラクタクラスの中にあるものを除く)、通常のコメントが使えるように -します。あなたの想像できるように、空白とコメントは非常に助けに +します。 +あなたの想像できるように、空白とコメントは非常に助けに なります。 =begin original @@ -139,8 +141,11 @@ 私たちは通常、C</>で区切られたものをパターンであると考えています が、パターンはほとんどすべてのキャラクタを使って区切ることが可能 -です。L<perlre>はこれを説明しています。たとえば、先に挙げたC<s///> -では、区切りとしてカーリーブレースを使っています。スラッシュ以外 +です。 +L<perlre>はこれを説明しています。 +たとえば、先に挙げたC<s///> +では、区切りとしてカーリーブレースを使っています。 +スラッシュ以外 の区切りを選択することによって、パターンの中に存在する区切り記号 と同じものをクォートする手間を省くことができます。 @@ -152,7 +157,8 @@ =head2 I'm having trouble matching over more than one line. What's wrong? X<regex, multiline> X<regexp, multiline> X<regular expression, multiline> -(二行以上に対するマッチングでトラブルがありました。何が悪いのでしょう?) +(二行以上に対するマッチングでトラブルがありました。 +何が悪いのでしょう?) =begin original @@ -211,7 +217,8 @@ たとえば、以下に挙げるプログラムは重複した単語を、たとえそれが行を またがっていても(ただしパラグラフはまたがっていない)探し出すものです。 -この例では、C</s>の必要はありません。なぜなら、この行をまたがらせたい正規表現で +この例では、C</s>の必要はありません。 +なぜなら、この行をまたがらせたい正規表現で ドットを使っていないからです。 C</m>を使う必要もありません。 それは、キャレットやドル記号をレコードの中にある改行の前後でマッチさせることは @@ -429,7 +436,8 @@ =end original -以下はサブルーチンにしたものです。上記と同じ手法です: +以下はサブルーチンにしたものです。 +上記と同じ手法です: sub preserve_case($$) { my ($old, $new) = @_; @@ -496,7 +504,8 @@ もしもっと C っぽい解決法が好みなら、 以下に挙げるスクリプトは、大小文字の違いを保ったまま、 文字毎に置換を行ないます。 -(そしてこれは Perl っぽい解法より 240% 遅いです。) +(そしてこれは Perl っぽい解法より 240% 遅いです。 +) 置換対象の文字列より も多くのキャラクターが置換後の文字列にあるのであれば、最後のキャラクターの 大小文字の種別が置換後の文字列の残りの部分のキャラクターに対して使われます。 @@ -605,10 +614,10 @@ =end original Perlの構文解析器(parser)は、区切りがシングルクォーテーションでない限り、 -正規表現の中にある $variableや@variableといったものを展開します。 +正規表現の中にある $variable や @variable といったものを展開します。 C<s///> による置換の右側にあるものはダブルクォーテーションで 括られた文字列とみなされるということを忘れないでください。 -また、すべての正規表現演算子はその前に \Qを置いておかないと、 +また、すべての正規表現演算子はその前に \Q を置いておかないと、 正規表現演算子として振る舞うということも忘れないでください。 以下に例を挙げます。 @@ -626,10 +635,8 @@ =end original -Because C<.> is special in regular expressions, and can match any -single character, the regex C<P.> here has matched the <Pl> in the -original string. -(TBT) +C<.> 正規表現では特別で、任意の 1 文字にマッチングするので、 +ここでの C<P.> は元の文字列の <Pl> にマッチングします。 =begin original @@ -659,7 +666,7 @@ =head2 What is C</o> really for? X</o, regular expressions> X<compile, regular expressions> -(C</o>は実際なんのためのものなのですか?) +(C</o> は実際なんのためのものなのですか?) =begin original @@ -694,12 +701,10 @@ =end original -Since the match operator C<m//>, the substitution operator C<s///>, -and the regular expression quoting operator C<qr//> are double-quotish -constructs, you can interpolate variables into the pattern. See the -answer to "How can I quote a variable to use in a regex?" for more -details. -(TBT) +マッチング演算子 C<m//>, 置換演算子 C<s///>, 正規表現クォート演算子 +C<qr//> はダブルクォート風構造なので、パターン中で変数を展開できます。 +詳細については "How can I quote a variable to use in a regex?" の答えを +参照してください。 =begin original @@ -888,8 +893,7 @@ X<regex, matching balanced test> X<regexp, matching balanced test> X<regular expression, matching balanced test> -(Perlの正規表現をテキストのバランスが取れているかを -検査するために使えますか?) +(Perl の正規表現をテキストのバランスが取れているかを検査するために使えますか?) =begin original @@ -903,8 +907,9 @@ =end original -Historically, Perl regular expressions were not capable of matching -balanced text. As of more recent versions of perl including 5.6.1 +歴史的に、Perl の正規表現はバランスの取られたテキストをマッチングする +能力はありませんでした。 +As of more recent versions of perl including 5.6.1 experimental features have been added that make it possible to do this. Look at the documentation for the (??{ }) construct in recent perlre manual pages to see an example of matching balanced parentheses. Be sure to take @@ -984,8 +989,8 @@ ほとんどの人が、欲張り正規表現(greedy regexps)は可能な限りマッチすると 考えています。 技術的には、量指定子(C<?>, C<*>, C<+>, C<{}>) はパターン全体よりも貪欲です。 -Perlは local greedであることを好み、 -全体の要求を即座に満足させます。同じ量指定子のnon-greedyバージョンを得るには、 +Perlは local greed であることを好み、全体の要求を即座に満足させます。 +同じ量指定子のnon-greedyバージョンを得るには、 C<??>, C<*?>, C<+?>, C<{}?>を使います。 =begin original @@ -1011,7 +1016,8 @@ =end original 二番目の置換が、“y ”を見つけてすぐにマッチングを中断していることに -注目してください。量指定子 C<*?>は正規表現エンジンに対して、 +注目してください。 +量指定子 C<*?>は正規表現エンジンに対して、 あなたが熱いジャガイモを扱っているときのように、可能な限り早く マッチするものを見つけて制御を次の行に渡すように効果的に指示します。 @@ -1074,8 +1080,8 @@ これを行うためには、入力ストリームにある単語のそれぞれについて解析する 必要があります。 -私たちはここで、一つ前の質問と同様に、非空白キャラクターの塊を語とするのではなく -アルファベット、ハイフン、アポストロフィ、の塊を語とします: +私たちはここで、一つ前の質問と同様に、非空白キャラクターの塊を語と +するのではなく、アルファベット、ハイフン、アポストロフィ、の塊を語とします: while (<>) { while ( /(\b[^\W_\d][\w'-]+\b)/g ) { # misses "`sheep'" @@ -1240,7 +1246,7 @@ =head2 Why don't word-boundary searches with C<\b> work for me? X<\b> -(なぜC<\b>を使った語境界の検索がうまく行かないのでしょうか?) +(なぜ C<\b> を使った語境界の検索がうまく行かないのでしょうか?) =begin original @@ -1541,9 +1547,8 @@ =end original -After the match fails at the letter C<a>, perl resets C<pos()> -and the next match on the same string starts at the beginning. -(TBT) +文字 C<a> のマッチングに失敗した後、perl は C<pos()> をリセットし、 +同じ文字列に対する次のマッチングは先頭から行います。 $_ = "1122a44"; while( m/\G(\d\d)/g ) @@ -1565,10 +1570,11 @@ =end original -You can disable C<pos()> resets on fail with the C<c> flag, documented -in L<perlop> and L<perlreref>. Subsequent matches start where the last -successful match ended (the value of C<pos()>) even if a match on the -same string has failed in the meantime. In this case, the match after +L<perlop> と L<perlreref> に書いているように、C<c> フラグをつけることで +C<pos()> のリセットを抑制できます。 +引き続くマッチングは、その間に同じ文字列でのマッチングが失敗していても、 +直前の成功したマッチングが終了した場所 (C<pos()> の値) から開始されます。 +この場合、the match after the C<while()> loop starts at the C<a> (where the last match stopped), and since it does not use any anchor it can skip over the C<a> to find C<44>. @@ -1593,8 +1599,8 @@ Typically you use the C<\G> anchor with the C<c> flag when you want to try a different match if one fails, -such as in a tokenizer. Jeffrey Friedl offers this example -which works in 5.004 or later. +such as in a tokenizer. +Jeffrey Friedl が、5.004 以降で動作する、これに関する例を提供してくれました。 (TBT) while (<>) { @@ -1633,8 +1639,7 @@ =head2 Are Perl regexes DFAs or NFAs? Are they POSIX compliant? X<DFA> X<NFA> X<POSIX> -(Perlの正規表現ルーチンはDFAですかNFAですか? -また、それはPOSIXに従ってますか?) +(Perl の正規表現ルーチンは DFA ですか NFA ですか? また、それは POSIX に従ってますか?) =begin original @@ -1651,16 +1656,16 @@ =end original -Perlの正規表現はegrep(1)のDFA (deterministic finite automata, +Perl の正規表現は egrep(1) の DFA (deterministic finite automata, 決定性有限オートマトン)と似たものではあるのですが、 実際のところはバックトラックや後方参照 (backreferencing)のために -NFAとして実装されています。 -そして、Perlの正規表現は POSIX形式のものでもありません。 +NFA として実装されています。 +そして、Perl の正規表現は POSIX 形式のものでもありません。 なぜなら、それはすべてのケースにおいて最悪の振る舞いを行うからです (一部の人は、それが遅さをもたらすにもかからわず、一貫性をもたらすという点を 好んでいるようです)。 -上記のことなどに関しての詳細はJeffrery Friedlによる O'Reillyから出版されている -"Mastering Regular Expressions" という本を参照してください。 +上記のことなどに関しての詳細は Jeffrery Friedl による O'Reilly から +出版されている "Mastering Regular Expressions" という本を参照してください。 =head2 What's wrong with using grep in a void context? X<grep> @@ -1678,9 +1683,12 @@ =end original 問題は、grep はそのコンテキストには関係なくリストを返すことです。 -これはつまり、Perlにあなたが無視してしまうための戻り値のリストを +これはつまり、Perl にあなたが無視してしまうための戻り値のリストを 作らせるということです。 -プログラミング言語を扱う方法はなく、あなたは鈍感な無法者です! +If the list is large, you waste both time and space. +If your intent is to iterate over the list, then use a for loop for this +purpose. +(TBT) =begin original @@ -1698,6 +1706,8 @@ X<regex, and multibyte characters> X<regexp, and multibyte characters> X<regular expression, and multibyte characters> X<martian> X<encoding, Martian> +(マルチバイト文字を含む文字列をマッチングさせるには?) + =begin original Starting from Perl 5.6 Perl has had some level of multibyte character @@ -1738,9 +1748,8 @@ =end original -以下に、The Perl Journalの -第五号でこの問題についてより詳しい記事を書いたJeffery Friedlにより -提案されたアプローチの幾つかを挙げます。 +以下に、The Perl Journal の第五号でこの問題についてより詳しい記事を書いた +Jeffery Friedl により提案された手法の幾つかを挙げます。 =begin original @@ -1752,8 +1761,8 @@ =end original -さて、ここでASCIIの大文字二文字で火星語の符号化をしていると仮定しましょう -(たとえば、 "CV", "SG", "VS", "XX"などといった二バイトの並びが +さて、ここで ASCII の大文字二文字で火星語の符号化をしていると仮定しましょう +(たとえば、"CV", "SG", "VS", "XX" などといった二バイトの並びが 火星語の一文字を表わすということです)。 =begin original @@ -1763,7 +1772,7 @@ =end original -ですから、火星語の符号化をしている 12バイトの "I am CVSGXX!" 文字列は、 +ですから、火星語の符号化をしている 12 バイトの "I am CVSGXX!" 文字列は、 'I', ' ', 'a', 'm', ' ', 'CV', 'SG', 'XX', '!' という九文字で構成されます。 =begin original @@ -1776,12 +1785,13 @@ =end original -ここで、C</GX/>という一文字検索をしたいと考えてみましょう。 -Perlは火星語については何も知りませんから、"I am CVSGXX!" という文字列にある -"GX"二バイトを見つけ出してしまうでしょうが、これは文字として +ここで、C</GX/> という一文字検索をしたいと考えてみましょう。 +Perl は火星語については何も知りませんから、"I am CVSGXX!" という文字列にある +"GX" 二バイトを見つけ出してしまうでしょうが、これは文字として そこにあるものではありません。 -つまり、"SG"に続けて"XX"があるのでそう見えるだけであって、 -本当に"GX"があるわけではないのです。これは大きな問題です。 +つまり、"SG" に続けて "XX" があるのでそう見えるだけであって、 +本当に "GX" があるわけではないのです。 +これは大きな問題です。 =begin original Index: docs/perl/5.10.0/perlfaq7.pod diff -u docs/perl/5.10.0/perlfaq7.pod:1.1 docs/perl/5.10.0/perlfaq7.pod:1.2 --- docs/perl/5.10.0/perlfaq7.pod:1.1 Tue Apr 8 04:07:54 2008 +++ docs/perl/5.10.0/perlfaq7.pod Sat May 31 05:53:32 2008 @@ -75,7 +75,7 @@ =end original - $ スカラー値(数値、文字列、リファレンス)に対するもの + $ スカラ値(数値、文字列、リファレンス)に対するもの @ 配列に対するもの % ハッシュ(連想配列)に対するもの & サブルーチン(またの名を関数、手続き、メソッド)に対するもの @@ -119,7 +119,7 @@ I<どちらでもない> ということに注意してください。 これはハンドル FILE に対する C<< <> >> 演算子です。 一行(そう、レコードですね。L<perlvar/$E<sol>> を参照してください) を -FILE というハンドルからスカラーコンテキストで読み出します。 +FILE というハンドルからスカラコンテキストで読み出します。 リストコンテキストの場合は B<全ての> 行を読み出します。 ファイルの C<< <> >> に関係する open、close などの操作を行うときには、 ハンドルについて行っている場合であっても @@ -210,9 +210,7 @@ =end original -You can also use a list slice to select only the elements that -you need: -(TBT) +必要な要素だけを選択するために、リストスライスも使えます: ($dev, $ino, $uid, $gid) = ( stat($file) )[0,1,4,5]; @@ -246,7 +244,7 @@ =end original -Additionally, you can enable and disable categories of warnings. +さらに、警告の分野毎に警告を有効または無効にできます。 You turn off the categories you want to ignore and you can still get other categories of warnings. See L<perllexwarn> for the complete details, including the category names and hierarchy. @@ -482,10 +480,9 @@ =end original -If you don't need to use C code, other tools such as -ExtUtils::ModuleMaker and Module::Starter, can help you -create a skeleton module distribution. -(TBT) +C のコードを使う必要がないのなら、ExtUtils::ModuleMaker や +Module::Starter といったツールが、モジュール配布の骨格を作るのを +助けてくれます。 =begin original @@ -496,14 +493,14 @@ =end original -You may also want to see Sam Tregar's "Writing Perl Modules -for CPAN" ( http://apress.com/book/bookDisplay.html?bID=14 ) -which is the best hands-on guide to creating module -distributions. -(TBT) +モジュール配布を作成するための最良の実践型ガイドである、Sam Tregar による +"Writing Perl Modules for CPAN" +( http://apress.com/book/bookDisplay.html?bID=14 ) を見るのもよいでしょう。 =head2 How do I adopt or take over a module already on CPAN? +(すでに CPAN にあるモジュールを引き継ぐには?) + =begin original (contributed by brian d foy) @@ -520,10 +517,9 @@ =end original -The easiest way to take over a module is to have the current -module maintainer either make you a co-maintainer or transfer -the module to you. -(TBT) +モジュールを引き継ぐのに一番簡単な方法は、現在のモジュールのメンテナに +連絡して、共同メンテナにしてもらうか、モジュールを引き渡してもらう +ことです。 =begin original @@ -533,10 +529,9 @@ =end original -If you can't reach the author for some reason (e.g. email bounces), -the PAUSE admins at modul****@perl***** can help. The PAUSE admins -treat each case individually. -(TBT) +もし何らかの理由(メールが返ってきたなど)で作者と連絡が取れない場合、 +PAUSE 管理者である modul****@perl***** が助けになるかもしれません。 +PAUSE 管理者はそれぞれの場合を個別に扱います。 =over 4 @@ -563,10 +558,8 @@ =end original -Write to modul****@perl***** explaining what you did to contact the -current maintainer. The PAUSE admins will also try to reach the -maintainer. -(TBT) +現在のメンテナに連絡するためにしたことの説明を modul****@perl***** に書きます。 +PAUSE 管理者もメンテナに連絡を試みます。 =item @@ -577,9 +570,8 @@ =end original -Post a public message in a heavily trafficked site announcing your -intention to take over the module. -(TBT) +モジュールを引き継ぎたいという意思を表明するために、トラフィックの多い +サイトに公的なメッセージを投稿します。 =item @@ -592,11 +584,11 @@ =end original -Wait a bit. The PAUSE admins don't want to act too quickly in case -the current maintainer is on holiday. If there's no response to -private communication or the public post, a PAUSE admin can transfer -it to you. -(TBT) +しばらく待ちます。 +PAUSE 管理者は、現在のメンテナが休暇中の場合に、あまりに性急に行動したいとは +思いません。 +もし私的な通信や公的な投稿に反応がない場合、PAUSE 管理者はモジュールを +あなたに移行できます。 =back @@ -616,7 +608,7 @@ =head2 How can I tell if a variable is tainted? -(変数が汚染されているかどうかをどうやれば確かめられますか?) +(変数が汚染されているかどうかを確かめるには?) =begin original @@ -626,14 +618,13 @@ =end original -You can use the tainted() function of the Scalar::Util module, available -from CPAN (or included with Perl since release 5.8.0). -See also L<perlsec/"Laundering and Detecting Tainted Data">. -(TBT) +CPAN にある (リリース 5.8.0 からは Perl に含まれている) Scalar::Util +モジュールの tainted() 関数が使えます。 +L<perlsec/"Laundering and Detecting Tainted Data"> も参照してください。 =head2 What's a closure? -(クロージャー(closure)ってなんですか?) +(クロージャ(closure)ってなんですか?) =begin original @@ -641,7 +632,7 @@ =end original -クロージャーはL<perlref>に説明があります。 +クロージャは L<perlref> に説明があります。 =begin original @@ -654,9 +645,9 @@ =end original -B<クロージャー>は、きちんとした定義を持ったコンピューター科学の用語ですが +B<クロージャ> は、きちんとした定義を持ったコンピュータ科学の用語ですが その意味を説明するのはとても難しいのです。 -クロージャーは Perl では、そのスコープの外側でもレキシカル変数に対する +クロージャは Perl では、そのスコープの外側でもレキシカル変数に対する リファレンスを保持しつづける無名サブルーチンとして実装されています。 これらのレキシカルは、サブルーチンが定義されたときの変数に対して、 魔法のような参照(magically refer)を行います(深い束縛、deep binding)。 @@ -673,14 +664,14 @@ =end original -クロージャーは、Perl ができるような関数の戻り値として関数それ自身を返す関数を +クロージャは、Perl ができるような関数の戻り値として関数それ自身を返す関数を 持つことができるプログラミング言語でもっともよく使われます。 -一部の言語では、無名関数を提供しているけれども適切なクロージャーを提供する +一部の言語では、無名関数を提供しているけれども適切なクロージャを提供する 能力はないということに注意してください。 たとえば Python がそうです。 -クロージャーに関するより詳しいことは、関数言語に関するなんらかの教科書を +クロージャに関するより詳しいことは、関数言語に関するなんらかの教科書を みてください。 -Scheme はクロージャーをサポートするだけでなく、それを推奨している言語です。 +Scheme はクロージャをサポートするだけでなく、それを推奨している言語です。 =begin original @@ -688,7 +679,7 @@ =end original -以下は、古典的な、クロージャーではない関数を生成する関数です: +以下は、古典的な、クロージャではない関数を生成する関数です: sub add_function_generator { return sub { shift() + shift() }; @@ -707,9 +698,9 @@ =end original add_function_generator() が返した無名サブルーチンは技術的には -クロージャーではありません。 +クロージャではありません。 なぜなら、あれはスコープの外側で参照するようなレキシカルがないからです。 -クロージャーを使うことによって、後で埋めることのできるカスタマイズ可能な +クロージャを使うことによって、後で埋めることのできるカスタマイズ可能な 幾つかのスロットを持つ B<関数テンプレート> のように働きます。 =begin original @@ -724,7 +715,7 @@ それとは対照的に、次の関数 make_adder() では、関数自身のスコープの外側で レキシカル変数に対するリファレンスを持つ無名関数を返します。 -そのようなリファレンスは Perl が適切なクロージャーを返すように要求するので、 +そのようなリファレンスは Perl が適切なクロージャを返すように要求するので、 その変数を参照するときはいつでも関数が生成されたときの レキシカルが参照されます。 @@ -746,7 +737,7 @@ これで、C<&$f1($n)> は それに渡した $n に対して常に 20 を加え、 C<&$f2($n)> は渡された $n に常に 555 を加えます。 -クロージャーの中にある $addpiece が仕事をしています。 +クロージャの中にある $addpiece が仕事をしています。 =begin original @@ -755,7 +746,7 @@ =end original -クロージャーは、それほど難しくない状況でよく使われます。 +クロージャは、それほど難しくない状況でよく使われます。 たとえば、関数にちょっとしたコードを押しこみたいときがそうです: my $line; @@ -806,9 +797,8 @@ =end original -This is discussed in more detail in L<perlsub>, see the entry on -I<Persistent Private Variables>. -(TBT) +これは L<perlsub> でより詳しく議論されているので、 +I<Persistent Private Variables> のエントリを参照してください。 =head2 What is variable suicide and how can I prevent it? @@ -834,12 +824,13 @@ =end original -変数の自殺とは、(一時的にしろ、恒久的にしろ)変数の値を失ったときのことを指します。 -これは、クロージャー、もしくは別名つけされた foreach イテレーター変数や -サブルーチンの引数と相互作用している my() や local() を通したスコープによって -引き起こされます。 -以前はこのやり方で変数の値をうっかりとなくしてしまうように使われがちでしたが、 -現在は非常に難しくなっています。 +変数の自殺とは、(一時的にしろ、恒久的にしろ)変数の値を失ったときのことを +指します。 +これは、クロージャ、もしくは別名つけされた foreach イテレータ変数や +サブルーチンの引数と相互作用している my() や local() を通した +スコープによって引き起こされます。 +以前はこのやり方で変数の値をうっかりとなくしてしまうように +使われがちでしたが、現在は非常に難しくなっています。 以下のコードを考えてみましょう: my $f = 'foo'; @@ -889,8 +880,7 @@ =head2 How can I pass/return a {Function, FileHandle, Array, Hash, Method, Regex}? -({関数, ファイルハンドル, 配列, ハッシュ, メソッド, 正規表現} を渡したり返すのは -どうすればできますか?) +({関数, ファイルハンドル, 配列, ハッシュ, メソッド, 正規表現} を渡したり返したりするには?) =begin original @@ -950,9 +940,7 @@ =end original -As of Perl 5.6, you can represent filehandles with scalar variables -which you treat as any other scalar. -(TBT) +Perl 5.6 から、他のスカラと同様にファイルハンドルもスカラ変数で扱えます。 open my $fh, $filename or die "Cannot open $filename! $!"; func( $fh ); @@ -1003,7 +991,8 @@ このパターンは一度だけコンパイル時にコンパイルされ、 実行時にはコンパイルされません。 このしゃれた C<qr//> 記法は 5.005 リリースで初めて提供されました。 -それまでは、この問題に対して遥かに直感的でない手法をとらなければなりませんでした。 +それまでは、この問題に対して遥かに直感的でない手法をとらなければ +なりませんでした。 例えば、先ほどのコードを C<qr//> なしで書くと: 以下の例は、c<qr//>を使って正規表現として比較すべき文字列を渡す方法の例です: @@ -1109,7 +1098,7 @@ =end original オブジェクトとそのメソッド呼び出しと引数とをまとめるために -クロージャーを使うこともできます: +クロージャを使うこともできます: my $whatnot = sub { $some_obj->obfuscate(@args) }; func($whatnot); @@ -1293,7 +1282,8 @@ C<my($x)> は、現在のサブルーチンにおいてのみ参照できる変数を新たに生成します。 これはコンパイル時に行われるので、レキシカルスコープだとか 静的スコープと呼ばれます。my() はプライベート変数に作用し、 -レキシカル変数とか、(間違って)静的(スコープを持った)変数と呼ばれることもあります。 +レキシカル変数とか、(間違って)静的(スコープを持った)変数と +呼ばれることもあります。 =begin original @@ -1346,7 +1336,8 @@ まとめると、local() はあなたがプライベートと考えるようなことをローカルな 変数に対して行うようなことはありません。 これはグローバル変数に一時的な値を与えるだけです。 -my() は、あなたがプライベート変数を必要としているときに探し求めているものです。 +あなたがプライベート変数を必要としている場合、my() があなたが +探し求めているものです。 =begin original @@ -1372,7 +1363,7 @@ =end original -自分のパッケージを知っているのなら、これを $Some_Pack::var と陽に +自分のパッケージを知っているのなら、これを $Some_Pack::var と明示的に 記述できます。 $::var という記法はカレントパッケージにおける動的な $var ではなく、 "main" パッケージの中にあるそれなのだということに注意してください。 @@ -1456,10 +1447,10 @@ C<my()> と C<local()> は C<=> の右辺に対してリストコンテキストを与えます。 読み込み操作 <FH> は Perlの関数や演算子の多くと同じくそれが呼び出されたときの コンテキストを見分けることができて、それに応じて適切に振る舞います。 -一般的には、scalar()関数が助けになるでしょう。 +一般的には、scalar() 関数が助けになるでしょう。 その関数は(一般的な神話(myth)とは反して)引数となるデータに対して -何も行いませんが、引数がスカラーとして振る舞うように指示します。 -関数のスカラー時の振る舞いが定義されていないのであれば、 +何も行いませんが、引数がスカラとして振る舞うように指示します。 +関数のスカラ時の振る舞いが定義されていないのであれば、 当然ながらこれはあなたの助けにはなりません(sort() がそうです)。 =begin original @@ -1469,7 +1460,7 @@ =end original -しかしながら特定のケースにおいては、スカラーコンテキストを強制するために +しかしながら特定のケースにおいては、スカラコンテキストを強制するために 単に括弧を取り除く必要があります: local($foo) = <FILE>; # WRONG @@ -1587,7 +1578,7 @@ =head2 How do I create a switch or case statement? -(switch文やcase文を作るには?) +(switch 文や case 文を作るには?) =begin original @@ -1596,10 +1587,8 @@ =end original -If one wants to use pure Perl and to be compatible with Perl versions -prior to 5.10, +もしピュア Perl を使って、バージョン 5.10 より前と互換性を持たせたいなら、 構造文を書くための一般的な答えは以下のようなものです: -(TBT) for ($variable_to_test) { if (/pat1/) { } # do something @@ -1717,9 +1706,9 @@ =end original -Note that starting from version 5.10, Perl has now a native switch -statement. See L<perlsyn>. -(TBT) +バージョン 5.10 から、Perl はネイティブな switch 文があることに +注意してください。 +L<perlsyn> を参照してください。 =begin original @@ -1854,7 +1843,7 @@ =head2 How can I comment out a large block of perl code? -(perlプログラムの大きなブロックをコメントアウトするのは +(perl プログラムの大きなブロックをコメントアウトするのは どうすればできますか?) =begin original @@ -1867,11 +1856,12 @@ =end original -You can use embedded POD to discard it. Enclose the blocks you want -to comment out in POD markers. The <=begin> directive marks a section -for a specific formatter. Use the C<comment> format, which no formatter -should claim to understand (by policy). Mark the end of the block -with <=end>. +組み込みの POD を使えます。 +コメントアウトしたいブロックを POD マーカーで囲んでください。 +<=begin> 指示子は区域を特定のフォーマッタ用としてマークします。 +Use the C<comment> format, which no formatter +should claim to understand (by policy). +<=end> でブロックの終わりをマークしてください。 (TBT) # program is here @@ -2182,11 +2172,13 @@ 使いたくなることがあるかもしれません。 これには、フォーマット、ハンドル、サブルーチンには関係ありません。 これらは常にグローバルだからです--これらに my() を使うことはできません。 -おそらく、スカラー、配列、ハッシュのために--そして普通はサブルーチンのために-- +おそらく、スカラ、配列、ハッシュのために--そして普通はサブルーチンのために-- だけ、ハードリファレンスが必要でしょう。 =head2 What does "bad interpreter" mean? +("bad interpreter" とはどういう意味ですか?) + =begin original (contributed by brian d foy) @@ -2203,10 +2195,9 @@ =end original -The "bad interpreter" message comes from the shell, not perl. The -actual message may vary depending on your platform, shell, and locale -settings. -(TBT) +"bad interpreter" というメッセージは perl ではなく、シェルが出力しています。 +実際のメッセージはプラットフォーム、シェル、ロケール設定によって +様々です。 =begin original @@ -2240,9 +2231,8 @@ =end original -If you see "bad interpreter: Permission denied", you need to make your -script executable. -(TBT) +"bad interpreter: Permission denied" と表示されたら、スクリプトを +実行可能にする必要があります。 =begin original @@ -2251,9 +2241,7 @@ =end original -In either case, you should still be able to run the scripts with perl -explicitly: -(TBT) +どちらの場合でも、明示的に perl でスクリプトを実行できるようにするべきです: % perl script.pl @@ -2265,10 +2253,9 @@ =end original -If you get a message like "perl: command not found", perl is not in -your PATH, which might also mean that the location of perl is not -where you expect it so you need to adjust your shebang line. -(TBT) +"perl: command not found" のようなメッセージが出た場合、perl が PATH に +ありません; つまりおそらくは perl の位置があなたの想定している +場所ではないことも意味しているので、#! 行を調整する必要があります。 =head1 REVISION Index: docs/perl/5.10.0/perlfaq8.pod diff -u docs/perl/5.10.0/perlfaq8.pod:1.1 docs/perl/5.10.0/perlfaq8.pod:1.2 --- docs/perl/5.10.0/perlfaq8.pod:1.1 Tue Apr 8 04:07:54 2008 +++ docs/perl/5.10.0/perlfaq8.pod Sat May 31 05:53:32 2008 @@ -20,7 +20,8 @@ =end original FAQ のこのセクションでは、オペレーティングシステムとの対話に関する質問を -扱っています。これにはプロセス間(IPC)、ユーザーインターフェース +扱っています。 +これにはプロセス間(IPC)、ユーザーインターフェース (キーボード、スクリーン、ポインティングデバイス)の制御、 その他データ操作に関連しないほとんどの事柄を含みます。 @@ -114,10 +115,8 @@ =end original -これらの一部の特殊なケースは -as examples in other answers -in this section of the perlfaq. -(TBT) +これらの一部の特殊なケースは、このセクションの他の回答の例として +示されています。 =head2 How do I print something out in color? @@ -388,8 +387,10 @@ =end original -(この質問は web とは関係ありません。それに関しては 別の FAQ を -参照してください。) +(この質問は web とは関係ありません。 +それに関しては 別の FAQ を +参照してください。 +) =begin original @@ -564,8 +565,7 @@ =end original -You'll also see code that does this without a temporary variable, as in -(TBT) +以下のように、これを一時変数を使わないで行うコードを見るかもしれません: select((select(DEV), $| = 1)[0]); @@ -1002,12 +1002,13 @@ =end original -The C<Time::HiRes> module (part of the standard distribution as of -Perl 5.8) measures time with the C<gettimeofday()> system call, which -returns the time in microseconds since the epoch. If you can't install +(Perl 5.8 から標準配布の一部である) C<Time::HiRes> モジュールは、 +紀元からのマイクロ秒を返す C<gettimeofday()> システムコールを使って時間を +計測します。 +If you can't install C<Time::HiRes> for older Perls and you are on a Unixish system, you -may be able to call C<gettimeofday(2)> directly. See -L<perlfunc/syscall>. +may be able to call C<gettimeofday(2)> directly. +L<perlfunc/syscall> を参照してください。 (TBT) =head2 How can I do an atexit() or setjmp()/longjmp()? (Exception handling) @@ -1334,9 +1335,8 @@ =end original -You can also use the open3() function from IPC::Open3. Benjamin -Goldberg provides some sample code: -(TBT) +IPC::Open3 の open3() 関数も使えます。 +Benjamin Goldberg がいくつかのサンプルコードを提供しています: =begin original @@ -1344,8 +1344,7 @@ =end original -To capture a program's STDOUT, but discard its STDERR: -(TBT) +あるプログラムの STDOUT は捕捉したいが、STDERR は捨てたい場合: use IPC::Open3; use File::Spec; @@ -1361,8 +1360,7 @@ =end original -To capture a program's STDERR, but discard its STDOUT: -(TBT) +あるプログラムの STDERR は捕捉したいが、STDOUT は捨てたい場合: use IPC::Open3; use File::Spec; @@ -1449,8 +1447,7 @@ =end original -これらのどれでも、 -呼び出しの前にファイル記述子を変更することができます: +これらのどれでも、呼び出しの前にファイル記述子を変更できます: open(STDOUT, ">logfile"); system("ls"); @@ -1461,8 +1458,7 @@ =end original -Bourneシェルのファイル記述子リダイレクション -(file-descriptor redirection)を使うこともできます: +Bourne シェルのファイル記述子リダイレクションを使うこともできます: $output = `$cmd 2>some_file`; open (PIPE, "cmd 2>some_file |"); @@ -1507,7 +1503,7 @@ これは open() が、STDERR を(open() が呼び出された時点で)STDOUT が 使っていた場所に対応するようにするので失敗します。 -その後で backticks は STDOUT(に出力された内容)を文字列にしますが、 +その後で逆クォートは STDOUT(に出力された内容)を文字列にしますが、 STDERR を変更することはしません(これは以前の STDOUT が指していたところです)。 =begin original @@ -1524,13 +1520,11 @@ backticlsの中では、csh(1) のリダイレクト構文ではなく、 Bourne shell (sh(1)) のリダイレクト構文を B<使わなければならない> ということに注意してください! -なぜ Perl の system()、backticks、パイプオープンの全てで -Bourne シェルのものを使うかは -F<versus/csh.whynot> article in the "Far More Than You Ever Wanted To -Know" collection in http://www.cpan.org/misc/olddoc/FMTEYEWTK.tgz -で説明されています。 +なぜ Perl の system()、backticks、パイプオープンの全てで Bourne シェルの +ものを使うかは http://www.cpan.org/misc/olddoc/FMTEYEWTK.tgz にある +"Far More Than You Ever Wanted To Know" の F<versus/csh.whynot> という記事で +説明されています。 あるコマンドの標準出力と標準エラー出力を両方とも捉えるには: -(TBT) $output = `cmd 2>&1`; # either with backticks $pid = open(PH, "cmd 2>&1 |"); # or with an open pipe @@ -1596,7 +1590,8 @@ =end original -これらの例では順序が重要です。なぜなら、 +これらの例では順序が重要です。 +なぜなら、 シェルがリダイレクトのためのファイル記述子を処理する順序は 正確に左から右へという順になっているからです。 @@ -1612,7 +1607,8 @@ =end original 最初のコマンドは標準出力と標準エラー出力の両方を -一時ファイルに送ります。二番目のコマンドは古い標準出力だけを +一時ファイルに送ります。 +二番目のコマンドは古い標準出力だけを ファイルへと送り、古い標準エラー出力は古い標準出力へと 送り出します。 @@ -1672,8 +1668,8 @@ =end original -厳密に言えばありません。形式的に言えば、 -保守しやすいコードを書くための良い方法ではありません。 +厳密に言えばありません。 +形式的に言えば、保守しやすいコードを書くための良い方法ではありません。 Perl has several operators for running external commands. Backticks are one; they collect the output from the command for use in your program. The C<system> function is @@ -1751,7 +1747,7 @@ =head2 How can I call backticks without shell processing? -(どうすればシェルの処理をせずにギャククォートを呼び出すことができますか?) +(どうすればシェルの処理をせずに逆クォートを呼び出すことができますか?) =begin original @@ -1788,8 +1784,7 @@ =end original -You can also: -(TBT) +以下のようにもできます: my @ok = (); if (open(GREP, "-|")) { @@ -1844,7 +1839,7 @@ 一部の stdio ではエラーフラグと eof フラグがセットされ、 それをクリアする必要があるからです。 -POSIXモジュールはこのために使える clearerr() を定義しています。 +POSIX モジュールはこのために使える clearerr() を定義しています。 これは、フラグをクリアするための技術的に正しい方法です。 以下の方法はこれよりは信頼性にかけるやり方です: @@ -1915,7 +1910,8 @@ =end original -Perl を学び、自分で書き直しましょう。まじめな話、単純なコンバータと +Perl を学び、自分で書き直しましょう。 +まじめな話、単純なコンバータと いうものはありません。 シェルで行うには不格好になるようなことも Perl では簡単に行うことができ、 そして、このとても不格好なことがシェル→ perl コンバーターを作製することを @@ -2227,9 +2223,8 @@ =end original -The alarm() function is not implemented on all versions of Windows. -Check the documentation for your specific version of Perl. -(TBT) +alarm() 関数は Windows の全てのバージョンで実装されているわけではありません。 +あなたの特定のバージョンの Perl のドキュメントをチェックしてください。 =head2 How do I set CPU limits? X<BSD::Resource> X<limit> X<CPU> @@ -2282,9 +2277,8 @@ =end original -See the C<BSD::Resource> and your systems documentation for the gory -details. -(TBT) +詳細については C<BSD::Resource> とあなたのシステムのドキュメントを +参照してください。 =head2 How do I avoid zombies on a Unix system? @@ -2479,7 +2473,8 @@ =end original -The perl message comes out with "Perl" in front. The BEGIN block +perl のメッセージは先頭に "Perl" を付けて出力されます。 +The BEGIN block works at compile time so all of the compilation errors and warnings get the "Perl:" prefix too. (TBT) @@ -2498,8 +2493,7 @@ =end original -If I don't see that "Perl:", it's not from perl. -(TBT) +"Perl:" という文字がなければ、perl が出しているものではありません。 =begin original @@ -2611,7 +2605,7 @@ =end original -あなたの使っているperlが、動的ローディングを使わずに +あなたの使っている perl が、動的ローディングを使わずに コンパイルされたものであれば、 ステップ 3 の (B<make>) を B<make perl> で置き換える必要があり、 エクステンションをリンクした新しい F<perl> の実行ファイルを @@ -2727,9 +2721,8 @@ =end original -For C<Makefile.PL>-based distributions, use the PREFIX and LIB options -when generating Makefiles: -(TBT) +C<Makefile.PL>-ベースの配布では、Makefile の生成時に PREFIX と LIB の +オプションを使ってください: perl Makefile.PL PREFIX=/mydir/perl LIB=/mydir/perl/lib @@ -2754,8 +2747,7 @@ =end original -For C<Build.PL>-based distributions, use the --install_base option: -(TBT) +C<Build.PL>-ベースの配布では、--install_base オプションを使ってください: perl Build.PL --install_base /mydir/perl @@ -2765,8 +2757,7 @@ =end original -You can configure CPAN.pm to automatically use this option too: -(TBT) +自動的にこのオプションを使うために、CPAN.pm を設定することも出来ます: % cpan cpan> o conf mbuild_arg --install_base /mydir/perl Index: docs/perl/5.10.0/perlfaq9.pod diff -u docs/perl/5.10.0/perlfaq9.pod:1.2 docs/perl/5.10.0/perlfaq9.pod:1.3 --- docs/perl/5.10.0/perlfaq9.pod:1.2 Thu May 22 05:32:28 2008 +++ docs/perl/5.10.0/perlfaq9.pod Sat May 31 05:53:32 2008 @@ -108,7 +108,8 @@ =end original -The CGI specification defines two kinds of script: the "Parsed Header" +CGI 仕様は 2 種類のスクリプトを定義しています: +the "Parsed Header" script, and the "Non Parsed Header" (NPH) script. Check your server documentation to see what it supports. "Parsed Header" scripts are simpler in various respects. The CGI specification allows any of the @@ -425,7 +426,8 @@ =end original -In this case, download means to use the file upload feature of HTML +この場合、 +download means to use the file upload feature of HTML forms. You allow the web surfer to specify a file to send to your web server. To you it looks like a download, and to the user it looks like an upload. @@ -545,10 +547,9 @@ =end original -If you are doing something complex, such as moving through many pages -and forms or a web site, you can use C<WWW::Mechanize>. +もし、複数のページとフォームや web サイトを移動するような、複雑なことを +しようとしているなら、C<WWW::Mechanize> が使えます。 全ての詳細についてはこれのドキュメントを参照してください。 -(TBT) =begin original @@ -660,8 +661,8 @@ =end original -Specify the complete URL of the destination (even if it is on the same -server). This is one of the two different kinds of CGI "Location:" +(たとえ同じサーバでも)宛て先の完全な URL を指定してください。 +This is one of the two different kinds of CGI "Location:" responses which are defined in the CGI specification for a Parsed Headers script. The other kind (an absolute URLpath) is resolved internally to the server without any HTTP redirection. @@ -729,12 +730,10 @@ 利用する Web サーバーで認証を有効にするには、Web サーバーを設定することが 必要です。 -The configuration is different for different sorts -of web servers--apache does it differently from iPlanet which does -it differently from IIS. +web サーバの種類によって設定は異なります -- apache は iPlanet とは異なり、 +また IIS とも異なります。 特定のサーバーに関する詳細については、そのサーバーのドキュメントを チェックしてください。 -(TBT) =head2 How do I edit my .htpasswd and .htgroup files with Perl? @@ -896,10 +895,10 @@ =end original -Many people try to write their own decoder (or copy one from -another program) and then run into one of the many "gotchas" -of the task. It's much easier and less hassle to use CGI.pm. -(TBT) +多くの人々が自分用のデコーダを書こうとします (あるいは他のプログラムから +コピーしようとします); そしてこの作業の多くの「コツ」の一つに出くわすことに +なります。 +CGI.pm を使うことはより簡単で、面倒事も少なくなります。 =head2 How do I check a valid mail address? @@ -948,8 +947,8 @@ =end original そのアドレスにメールを送ってそれが届いたかどうかを確認しなければ -完全にパート I<b> に答えられませんが、 -either the C<Email::Valid> or the C<RFC::RFC822::Address> module will do +完全にパート I<b> に答えられませんが、C<Email::Valid> か +C<RFC::RFC822::Address> のモジュールは will do both part I<a> and part I<b> as far as you can in real-time. (TBT)