argra****@users*****
argra****@users*****
2012年 2月 14日 (火) 02:33:19 JST
Index: docs/perl/5.10.1/perlfilter.pod diff -u docs/perl/5.10.1/perlfilter.pod:1.1 docs/perl/5.10.1/perlfilter.pod:1.2 --- docs/perl/5.10.1/perlfilter.pod:1.1 Tue Sep 13 05:58:08 2011 +++ docs/perl/5.10.1/perlfilter.pod Tue Feb 14 02:33:19 2012 @@ -24,13 +24,13 @@ =end original -This article is about a little-known feature of Perl called -I<source filters>. Source filters alter the program text of a module -before Perl sees it, much as a C preprocessor alters the source text of -a C program before the compiler sees it. This article tells you more -about what source filters are, how they work, and how to write your -own. -(TBT) +この記事は、ほとんど知られていない Perl の機能である I<ソースフィルタ> に +関するものです。 +C プリプロセッサが C プログラムのソーステキストをコンパイラが見る前に +変更するように、ソースフィルタはモジュールのプログラム文を Perl が +見る前に変更します。 +この記事は、ソースフィルタとは何か、どのように動作するのか、自分自身で +書くにはどうすればいいかについての情報を提供します。 =begin original @@ -40,13 +40,15 @@ =end original -The original purpose of source filters was to let you encrypt your -program source to prevent casual piracy. This isn't all they can do, as -you'll soon learn. But first, the basics. -(TBT) +ソースフィルタの本来の目的は、カジュアルな盗み見を防ぐためにプログラム +ソースを暗号化するためでした。 +これから学ぶように、出来ることはこれだけではありません。 +しかしまずは基本からです。 =head1 CONCEPTS +(コンセプト) + =begin original Before the Perl interpreter can execute a Perl script, it must first @@ -57,12 +59,11 @@ =end original -Before the Perl interpreter can execute a Perl script, it must first -read it from a file into memory for parsing and compilation. If that -script itself includes other scripts with a C<use> or C<require> -statement, then each of those scripts will have to be read from their -respective files as well. -(TBT) +Perl インタプリタが Perl スクリプトを実行できるようにする前に、 +パースとコンパイルのためにまずファイルをメモリに読み込まなければなりません。 +このスクリプト自身が C<use> 文や C<require> 文で他のスクリプトを +インクルードしているなら、それらのスクリプトも同様にファイルから読み込む +必要があります。 =begin original @@ -106,8 +107,7 @@ =end original -There are two important points to remember: -(TBT) +覚えておくべき重要なポイントが二つあります: =over 5 @@ -120,9 +120,8 @@ =end original -Although there can be any number of source streams in existence at any -given time, only one will be active. -(TBT) +同時に任意の数のソースストリームが存在できますが、一つだけが +アクティブとなります。 =item 2. @@ -132,8 +131,7 @@ =end original -Every source stream is associated with only one file. -(TBT) +各ソースストリームはただ一つのファイルと関連づけられます。 =back @@ -145,10 +143,9 @@ =end original -A source filter is a special kind of Perl module that intercepts and -modifies a source stream before it reaches the parser. A source filter -changes our diagram like this: -(TBT) +ソースフィルタは、ソースストリームがパーサに届く前に捕まえて修正する、 +特別な種類の Perl モジュールです。 +ソースフィルタは以下のようにダイアグラムを変更します: file ----> filter ----> parser @@ -161,11 +158,12 @@ =end original -If that doesn't make much sense, consider the analogy of a command -pipeline. Say you have a shell script stored in the compressed file -I<trial.gz>. The simple pipeline command below runs the script without -needing to create a temporary file to hold the uncompressed file. -(TBT) +これにあまり納得が出来ないなら、コマンドパイプラインの例えを +考えてみてください。 +圧縮されたファイル I<trial.gz> に補完されたシェルスクリプトを +考えてみてください。 +後述の単純なパイプラインコマンドは展開されたファイルを保管するための +一時ファイルを作ることなくスクリプトを実行します。 gunzip -c trial.gz | sh @@ -175,8 +173,7 @@ =end original -In this case, the data flow from the pipeline can be represented as follows: -(TBT) +この場合、パイプラインからのデータフローは以下のように表現できます: trial.gz ----> gunzip ----> sh @@ -186,14 +183,16 @@ =end original -With source filters, you can store the text of your script compressed and use a source filter to uncompress it for Perl's parser: -(TBT) +ソースフィルタがあると、スクリプトのテキストを圧縮して、Perl パーサのために +展開するソースフィルタを使います: compressed gunzip Perl program ---> source filter ---> parser =head1 USING FILTERS +(フィルタを使う) + =begin original So how do you use a source filter in a Perl script? Above, I said that @@ -303,8 +302,7 @@ =end original -The parser then sees the following code: -(TBT) +それからパーサは以下のコードを見ます: use Filter::cpp; $a = 1; @@ -317,9 +315,8 @@ =end original -Let's consider what happens when the filtered code includes another -module with use: -(TBT) +フィルタされたコードに use を使ったもう一つのモジュールを含んでいる +場合に何が起きるかを考えてみましょう: 1: use Filter::cpp; 2: #define TRUE 1 @@ -404,8 +401,7 @@ =end original -Once the first line has been processed, the flow will look like this: -(TBT) +最初の行が処理されると、フローは以下のようになります: file ---> uudecode ---> uncompress ---> parser filter filter @@ -425,6 +421,8 @@ =head1 WRITING A SOURCE FILTER +(ソースフィルタを書く) + =begin original There are three ways to write your own source filter. You can write it @@ -444,6 +442,8 @@ =head1 WRITING A SOURCE FILTER IN C +(C でソースフィルタを書く) + =begin original The first of the three available techniques is to write the filter @@ -535,6 +535,8 @@ =head1 CREATING A SOURCE FILTER AS A SEPARATE EXECUTABLE +(独立した実行ファイルとしてソースフィルタとして作成する) + =begin original An alternative to writing the filter in C is to create a separate @@ -602,8 +604,7 @@ =end original -The output you'll get when the script is executed: -(TBT) +スクリプトが実行されたときに得られる出力は: PQR a = 1 @@ -628,6 +629,8 @@ =head1 WRITING A SOURCE FILTER IN PERL +(Perl でソースフィルタを書く) + =begin original The easiest and most portable option available for creating your own @@ -833,8 +836,7 @@ =end original -If we encrypt this with C<mkrot13>: -(TBT) +これを C<mkrot13> で暗号化すると: print " hello fred \n"; @@ -844,8 +846,7 @@ =end original -the result will be this: -(TBT) +結果は以下のようになります: use Rot13; cevag "uryyb serq\a"; @@ -856,13 +857,14 @@ =end original -Running it produces this output: -(TBT) +これを実行すると以下の出力を生成します: hello fred =head1 USING CONTEXT: THE DEBUG FILTER +(コンテキストを使う: デバッグフィルタ) + =begin original The rot13 example was a trivial example. Here's another demonstration @@ -943,8 +945,7 @@ =end original -Here is the complete Debug filter: -(TBT) +以下は完全な Debug フィルタです: package Debug; @@ -1070,9 +1071,9 @@ =end original -Be warned: just as the C-preprocessor doesn't know C, the Debug filter -doesn't know Perl. It can be fooled quite easily: -(TBT) +警告: C プリプロセッサが C のことを知らないのと同様、Debug フィルタは +Perl のことを知りません。 +簡単にだませます: print <<EOM; ##DEBUG_BEGIN @@ -1091,6 +1092,8 @@ =head1 CONCLUSION +(結び) + =begin original You now have better understanding of what a source filter is, and you @@ -1192,6 +1195,8 @@ =head1 THINGS TO LOOK OUT FOR +(注意するべきこと) + =over 5 =item Some Filters Clobber the C<DATA> Handle @@ -1217,14 +1222,15 @@ =head1 REQUIREMENTS +(必要なもの) + =begin original The Source Filters distribution is available on CPAN, in =end original -The Source Filters distribution is available on CPAN, in -(TBT) +ソースフィルタディストリビューションは CPAN の以下から利用可能です CPAN/modules/by-module/Filter @@ -1253,3 +1259,10 @@ copyright 1998 The Perl Journal. It appears courtesy of Jon Orwant and The Perl Journal. This document may be distributed under the same terms as Perl itself. + +=begin meta + +Translate: SHIRAKATA Kentaro <argra****@ub32*****> + +=end meta + Index: docs/perl/5.10.1/perllexwarn.pod diff -u docs/perl/5.10.1/perllexwarn.pod:1.2 docs/perl/5.10.1/perllexwarn.pod:1.3 --- docs/perl/5.10.1/perllexwarn.pod:1.2 Thu Sep 29 04:43:32 2011 +++ docs/perl/5.10.1/perllexwarn.pod Tue Feb 14 02:33:19 2012 @@ -187,13 +187,13 @@ =end original -Although very useful, the big problem with using B<-w> on the command -line to enable warnings is that it is all or nothing. Take the typical -scenario when you are writing a Perl program. Parts of the code you -will write yourself, but it's very likely that you will make use of -pre-written Perl modules. If you use the B<-w> flag in this case, you -end up enabling warnings in pieces of code that you haven't written. -(TBT) +警告を有効にするのにコマンドラインで B<-w> を使うというのはとても +便利ですが、オールオアナッシングであるという問題があります。 +Perl のプログラムを書いているときのよくある状況を考えます。 +コードの一部はあなた自身が書きますが、かなり確実に既に書かれている +Perl モジュールを利用します。 +このような場合に B<-w> フラグを使うと、あなたが書いていないコードに +対しても警告を有効にすることになります。 =begin original @@ -203,10 +203,10 @@ =end original -Similarly, using C<$^W> to either disable or enable blocks of code is -fundamentally flawed. For a start, say you want to disable warnings in -a block of code. You might expect this to be enough to do the trick: -(TBT) +同様に、コードブロックで有効または無効にするために C<$^W> を使うことにも +本質的な欠点があります。 +まず、コードブロックで警告を無効にしたいとします。 +以下のようにすれば十分だと考えるかもしれません: { local ($^W) = 0; @@ -221,9 +221,8 @@ =end original -When this code is run with the B<-w> flag, a warning will be produced -for the C<$a> line -- C<"Reversed += operator">. -(TBT) +このコードが B<-w> フラグ付きで実行されると、C<$a> の行で警告が +出ます -- C<"Reversed += operator">。 =begin original @@ -232,9 +231,9 @@ =end original -The problem is that Perl has both compile-time and run-time warnings. To -disable compile-time warnings you need to rewrite the code like this: -(TBT) +問題は、Perl にはコンパイル時警告と実行時警告があると言うことです。 +コンパイル時警告を無効にするには、以下のようにコードを書き直す必要が +あります: { BEGIN { $^W = 0 } @@ -252,12 +251,11 @@ =end original -The other big problem with C<$^W> is the way you can inadvertently -change the warning setting in unexpected places in your code. For example, -when the code below is run (without the B<-w> flag), the second call -to C<doit> will trip a C<"Use of uninitialized value"> warning, whereas -the first will not. -(TBT) +C<$^W> に関するもう一つの問題は、コード中の予想外の位置の設定で不用意に +警告設定が変わるということです。 +例えば、以下のコードが(B<-w> フラグなしで)実行されると、C<doit> の +2 回目の呼び出しで C<"Use of uninitialized value"> 警告が出ますが、 +1 回目では出ません。 sub doit { @@ -300,9 +298,8 @@ =end original -There are three Command Line flags that can be used to control when -warnings are (or aren't) produced: -(TBT) +いつ警告が発生する(あるいは発生しない)かを制御するために使われる +三つのコマンドラインフラグがあります: =over 5 @@ -337,12 +334,12 @@ =end original -If the B<-W> flag is used on the command line, it will enable all warnings -throughout the program regardless of whether warnings were disabled -locally using C<no warnings> or C<$^W =0>. This includes all files that get -included via C<use>, C<require> or C<do>. -Think of it as the Perl equivalent of the "lint" command. -(TBT) +コマンドラインで B<-W> フラグが使われると、プログラム中で +C<no warnings> や C<$^W =0> を使って警告を無効にしていても無視して、全ての +警告を有効にします。 +これは C<use>, C<require>, C<do> 経由で読み込まれる全てのファイルにも +適用されます。 +Perl 用の "lint" コマンドの等価物と考えられます。 =item B<-X> X<-X> @@ -353,8 +350,7 @@ =end original -Does the exact opposite to the B<-W> flag, i.e. it disables all warnings. -(TBT) +正確に B<-W> フラグの逆を行います; つまり、全ての警告を無効にします。 =back @@ -381,8 +377,7 @@ =end original -How Lexical Warnings interact with B<-w>/C<$^W>: -(TBT) +レキシカル警告と B<-w>/C<$^W> の相互作用: =over 5 @@ -685,8 +680,7 @@ =end original -When run it produces this output -(TBT) +実行すると、以下の出力を生成します Useless use of time in void context at fatal line 3. Useless use of length in void context at fatal line 7. @@ -763,8 +757,7 @@ =end original -Consider the module C<MyMod::Abc> below. -(TBT) +以下の C<MyMod::Abc> モジュールを考えます。 package MyMod::Abc; @@ -997,3 +990,9 @@ Paul Marquess +=begin meta + +Translate: Kentaro Shirakata <argra****@ub32*****> + +=end meta +