argra****@users*****
argra****@users*****
2012年 8月 31日 (金) 16:31:11 JST
Index: docs/perl/5.10.1/perlfilter.pod diff -u docs/perl/5.10.1/perlfilter.pod:1.3 docs/perl/5.10.1/perlfilter.pod:1.4 --- docs/perl/5.10.1/perlfilter.pod:1.3 Tue Jul 3 03:47:00 2012 +++ docs/perl/5.10.1/perlfilter.pod Fri Aug 31 16:31:11 2012 @@ -495,16 +495,13 @@ =end original -All decryption filters work on the principle of "security through -obscurity." Regardless of how well you write a decryption filter and -how strong your encryption algorithm is, anyone determined enough can -retrieve the original source code. The reason is quite simple - once -the decryption filter has decrypted the source back to its original -form, fragments of it will be stored in the computer's memory as Perl -parses it. The source might only be in memory for a short period of -time, but anyone possessing a debugger, skill, and lots of patience can -eventually reconstruct your program. -(TBT) +全ての復号フィルタは「不明瞭さによるセキュリティ」の原則に則っています。 +どれだけうまく復号フィルタを書いて、どんなに強い暗号化アルゴリズムを +使っても、十分な決意があれば元のソースコードを取得できます。 +その理由はとても単純です - 一旦復号フィルタがソースを元の形に戻すと、その +一部は Perl がパースするためにコンピュータのメモリに保管されます。 +ソースは短い時間の間だけしかメモリにないかもしれませんが、デバッガ、スキル、 +多大な忍耐がある人なら最終的にはプログラムを再構成できます。 =begin original @@ -517,13 +514,12 @@ =end original -That said, there are a number of steps that can be taken to make life -difficult for the potential cracker. The most important: Write your -decryption filter in C and statically link the decryption module into -the Perl binary. For further tips to make life difficult for the -potential cracker, see the file I<decrypt.pm> in the source filters -module. -(TBT) +潜在的なクラッカーに対して物事を難しくするために取るいくつかのステップが +あります。 +最も重要なのは: 復号フィルタを C で書いて、復号モジュールを Perl バイナリと +静的にリンクすることです。 +潜在的なクラッカーに対して物事を難しくするために取るさらなるステップは、 +ソースフィルタモジュールの I<decrypt.pm> ファイルを参照してください。 =back @@ -542,13 +538,12 @@ =end original -An alternative to writing the filter in C is to create a separate -executable in the language of your choice. The separate executable -reads from standard input, does whatever processing is necessary, and -writes the filtered data to standard output. C<Filter::cpp> is an -example of a source filter implemented as a separate executable - the -executable is the C preprocessor bundled with your C compiler. -(TBT) +C でフィルタを書くための代替案は、好みの言語で独立した実行ファイルを +作ることです。 +独立した実行ファイルは標準出力から読み込み、何か必要な処理を行い、 +フィルタされたデータを標準出力に書き込みます。 +C<Filter::cpp> は、独立した実行ファイルとして実行されたソースフィルタの +例です - 実行ファイルは C コンパイラに付いている C プリプロセッサです。 =begin original @@ -566,18 +561,19 @@ =end original -The source filter distribution includes two modules that simplify this -task: C<Filter::exec> and C<Filter::sh>. Both allow you to run any -external executable. Both use a coprocess to control the flow of data -into and out of the external executable. (For details on coprocesses, -see Stephens, W.R. "Advanced Programming in the UNIX Environment." -Addison-Wesley, ISBN 0-210-56317-7, pages 441-445.) The difference -between them is that C<Filter::exec> spawns the external command -directly, while C<Filter::sh> spawns a shell to execute the external -command. (Unix uses the Bourne shell; NT uses the cmd shell.) Spawning -a shell allows you to make use of the shell metacharacters and -redirection facilities. -(TBT) +ソースフィルタ配布にはこのタスクを簡単にするための二つのモジュールが +あります: C<Filter::exec> と C<Filter::sh> です。 +どちらも外部実行ファイルを実行します。 +どちらも外部実行ファイルとのデータのやりとりを制御するのにコプロセスを +使います。 +(コプロセスの詳細については、Stephens, W.R. による +"Advanced Programming in the UNIX Environment." +Addison-Wesley, ISBN 0-210-56317-7, 441-445 ページ を参照してください。) +二つの違いは、C<Filter::exec> は外部コマンドを直接起動しますが、 +C<Filter::sh> は外部コマンドを起動するためのシェルを起動します。 +(Unix は Bourne シェルを使います; NT は cmd シェルを使います。) +シェルを起動することにより、シェルのメタ文字とリダイレクト機構を +使えるようになります。 =begin original @@ -612,13 +608,12 @@ =end original -Writing a source filter as a separate executable works fine, but a -small performance penalty is incurred. For example, if you execute the -small example above, a separate subprocess will be created to run the -Unix C<tr> command. Each use of the filter requires its own subprocess. -If creating subprocesses is expensive on your system, you might want to -consider one of the other options for creating source filters. -(TBT) +独立した実行ファイルとしてソースフィルタを書くとうまく動作しますが、 +小さい性能上のペナルティがあります。 +例えば、上述の小さい例を実行すると、Unix の C<tr> コマンドを実行するために +別々のサブプロセスが作られます。 +サブシステムの作成のコストが高いシステムでは、ソースフィルタを作るための +その他の選択肢を考えたいかもしれません。 =head1 WRITING A SOURCE FILTER IN PERL @@ -878,13 +873,13 @@ =end original -Say you wanted to include a lot of debugging code in your Perl script -during development, but you didn't want it available in the released -product. Source filters offer a solution. In order to keep the example -simple, let's say you wanted the debugging output to be controlled by -an environment variable, C<DEBUG>. Debugging code is enabled if the -variable exists, otherwise it is disabled. -(TBT) +開発中に Perl スクリプトに大量のデバッグコードを含めておきたいけれども、 +リリース製品では利用可能にしたくないとします。 +ソースフィルタが解決法を提供します。 +例を単純なままにするために、環境変数 C<DEBUG> で制御されるデバッグ出力が +ほしいとします。 +デバッグコードは、環境変数が存在すれば有効になり、さもなければ +無効になります。 =begin original @@ -913,15 +908,16 @@ =end original -When the C<DEBUG> environment variable exists, the filter ensures that -Perl parses only the code between the C<DEBUG_BEGIN> and C<DEBUG_END> -markers. That means that when C<DEBUG> does exist, the code above -should be passed through the filter unchanged. The marker lines can -also be passed through as-is, because the Perl parser will see them as -comment lines. When C<DEBUG> isn't set, we need a way to disable the -debug code. A simple way to achieve that is to convert the lines -between the two markers into comments: -(TBT) +C<DEBUG> 環境変数が存在するとき、フィルタは Perl が C<DEBUG_BEGIN> と +C<DEBUG_END> のマーカーの間のコードだけをパースするようにします。 +これにより、C<DEBUG> が存在すると、上述のコードはフィルタを変更なしで +通過して渡されます。 +マーカー行もそのまま渡されます; Perl パーサはこれらをコメント行として +扱うからです。 +C<DEBUG> が設定されていないとき、デバッグコードを無効にする方法が +必要になります。 +これを達成する簡単な方法は、二つのマーカーの間の行をコメントに +変換することです: ## DEBUG_BEGIN #if ($year > 1999) { @@ -1090,11 +1086,11 @@ =end original -You now have better understanding of what a source filter is, and you -might even have a possible use for them. If you feel like playing with -source filters but need a bit of inspiration, here are some extra -features you could add to the Debug filter. -(TBT) +これで、ソースフィルタとは何かについてよりよく理解できたと思います; +さらにこれらの可能性のある使い方を持っているかもしれません。 +もしソースフィルタで遊んでみたいと思っているけれどもちょっとした +インスピレーションが必要なら、以下はデバッグフィルタに加えることが出来る +追加機能です。 =begin original @@ -1107,13 +1103,12 @@ =end original -First, an easy one. Rather than having debugging code that is -all-or-nothing, it would be much more useful to be able to control -which specific blocks of debugging code get included. Try extending the -syntax for debug blocks to allow each to be identified. The contents of -the C<DEBUG> environment variable can then be used to control which -blocks get included. -(TBT) +まずは簡単なものです。 +デバッグコードをオールオアナッシングにするのではなく、どのブロックを +デバッグコードとして使うかを制御できるようにすればもっと便利です。 +それぞれのデバッグブロックを識別できるように文法に文法を +拡張してみてください。 +C<DEBUG> 環境変数の内容はどのブロックを使うかを制御するのに使えます。 =begin original @@ -1122,9 +1117,9 @@ =end original -Once you can identify individual blocks, try allowing them to be -nested. That isn't difficult either. -(TBT) +個々のブロックを識別できるようになったら、ネストできるように +してみてください。 +これも難しくはありません。 =begin original @@ -1137,13 +1132,12 @@ =end original -Here is an interesting idea that doesn't involve the Debug filter. -Currently Perl subroutines have fairly limited support for formal -parameter lists. You can specify the number of parameters and their -type, but you still have to manually take them out of the C<@_> array -yourself. Write a source filter that allows you to have a named -parameter list. Such a filter would turn this: -(TBT) +これはデバッグフィルタに関係ない面白いアイデアです。 +今のところ Perl サブルーチンは公式な引数リストに限定的に対応しています。 +パラメータの数とその型は指定できますが、自力で C<@_> 配列から取り出す +必要があります。 +名前付き引数リストを使えるようなソースフィルタを書きましょう。 +そのようなフィルタは以下のようなものを: sub MySub ($first, $second, @rest) { ... } @@ -1172,12 +1166,12 @@ =end original -Finally, if you feel like a real challenge, have a go at writing a -full-blown Perl macro preprocessor as a source filter. Borrow the -useful features from the C preprocessor and any other macro processors -you know. The tricky bit will be choosing how much knowledge of Perl's -syntax you want your filter to have. -(TBT) +最後に、本当の挑戦を好むなら、本格的な Perl マクロプリプロセッサを +ソースフィルタとして書いてみてください。 +C プリプロセッサやその他のマクロプロセッサから便利な機能を +借りてきてください。 +トリッキーなところは、Perl の文法のどれくらいの知識をフィルタに持たせるかを +選ぶところです。 =head1 THINGS TO LOOK OUT FOR @@ -1250,6 +1244,7 @@ =begin meta Translate: SHIRAKATA Kentaro <argra****@ub32*****> +Status: completed =end meta