オープンソース・ソフトウェアの開発とダウンロード

CVS リポジトリの参照

Annotation of /perldocjp/docs/modules/perlfaq-5.0150043/perlfaq8.pod

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.1 - (hide annotations) (download)
Mon Aug 11 16:47:51 2014 UTC (9 years, 8 months ago) by argrath
Branch: MAIN
CVS Tags: HEAD
perlfaq-5.0150043

1 argrath 1.1
2     =encoding euc-jp
3    
4     =head1 NAME
5    
6     =begin original
7    
8     perlfaq8 - System Interaction
9    
10     =end original
11    
12     perlfaq8 - システムとの相互作用
13    
14     =head1 DESCRIPTION
15    
16     =begin original
17    
18     This section of the Perl FAQ covers questions involving operating
19     system interaction. Topics include interprocess communication (IPC),
20     control over the user-interface (keyboard, screen and pointing
21     devices), and most anything else not related to data manipulation.
22    
23     =end original
24    
25     FAQ のこのセクションでは、オペレーティングシステムとの対話に関する質問を
26     扱っています。
27     これにはプロセス間(IPC)、ユーザーインターフェース
28     (キーボード、スクリーン、ポインティングデバイス)の制御、
29     その他データ操作に関連しないほとんどの事柄を含みます。
30    
31     =begin original
32    
33     Read the FAQs and documentation specific to the port of perl to your
34     operating system (eg, L<perlvms>, L<perlplan9>, ...). These should
35     contain more detailed information on the vagaries of your perl.
36    
37     =end original
38    
39     あなたの使っているオペレーティングシステム向けの移植について特有のことは、
40     それに関する FAQ とドキュメント(L<perlvms>, L<perlplan9> など)を
41     読んでください。
42     そこには、あなたの使う perl についてのより詳しい情報があります。
43    
44     =head2 How do I find out which operating system I'm running under?
45    
46     (実行しているオペレーティングシステムを見分けるには?)
47    
48     =begin original
49    
50     The C<$^O> variable (C<$OSNAME> if you use C<English>) contains an
51     indication of the name of the operating system (not its release
52     number) that your perl binary was built for.
53    
54     =end original
55    
56     C<$^O> という変数(use C<Engish> をしていれば C<$OSNAME>)は、あなたの使っている
57     perl の実行ファイルがビルドされたオペレーションシステムの名前
58     (リリース番号ではありません)の情報を持っています。
59    
60     =head2 How come exec() doesn't return?
61     X<exec> X<system> X<fork> X<open> X<pipe>
62    
63     (なぜ exec() は戻ってこないのでしょう?)
64    
65     =begin original
66    
67     (contributed by brian d foy)
68    
69     =end original
70    
71     (brian d foy によって寄贈されました)
72    
73     =begin original
74    
75     The C<exec> function's job is to turn your process into another
76     command and never to return. If that's not what you want to do, don't
77     use C<exec>. :)
78    
79     =end original
80    
81     C<exec> 関数の仕事は、あなたのプロセスを他のコマンドに切り替えて、
82     決して帰ってこないことです。
83     もしこれがあなたのしたいことでないなら、C<exec> を使わないでください。 :)
84    
85     =begin original
86    
87     If you want to run an external command and still keep your Perl process
88     going, look at a piped C<open>, C<fork>, or C<system>.
89    
90     =end original
91    
92     もし外部コマンドを実行して、かつ Perl プロセスを実行したままにしたい場合は、
93     パイプ付きの C<open>, C<fork>, C<system> のいずれかを見てください。
94    
95     =head2 How do I do fancy stuff with the keyboard/screen/mouse?
96    
97     (キーボード/画面/マウスの凝った機能を使うには?)
98    
99     =begin original
100    
101     How you access/control keyboards, screens, and pointing devices
102     ("mice") is system-dependent. Try the following modules:
103    
104     =end original
105    
106     キーボード、画面、ポインティングデバイス(“マウス”)にアクセスしたり
107     それを制御することはシステム依存です。
108     以下のモジュールを試してみてください:
109    
110     =over 4
111    
112     =item Keyboard
113    
114     Term::Cap Standard perl distribution
115     Term::ReadKey CPAN
116     Term::ReadLine::Gnu CPAN
117     Term::ReadLine::Perl CPAN
118     Term::Screen CPAN
119    
120     =item Screen
121    
122     Term::Cap Standard perl distribution
123     Curses CPAN
124     Term::ANSIColor CPAN
125    
126     =item Mouse
127    
128     Tk CPAN
129     Wx CPAN
130     Gtk2 CPAN
131     Qt4 kdebindings4 package
132    
133     =back
134    
135     =begin original
136    
137     Some of these specific cases are shown as examples in other answers
138     in this section of the perlfaq.
139    
140     =end original
141    
142     これらの一部の特殊なケースは、このセクションの他の回答の例として
143     示されています。
144    
145     =head2 How do I print something out in color?
146    
147     (色付きで何かを出力するには?)
148    
149     =begin original
150    
151     In general, you don't, because you don't know whether
152     the recipient has a color-aware display device. If you
153     know that they have an ANSI terminal that understands
154     color, you can use the L<Term::ANSIColor> module from CPAN:
155    
156     =end original
157    
158     一般的にはできません; なぜなら、あなたはディスプレイデバイスに関する
159     レシピについて何も知らないからです。
160     もしあなたがカラーの扱える ANSI ターミナルについて知っているのなら、
161     CPAN にある L<Term::ANSIColor> モジュールを使うことができます。
162    
163     use Term::ANSIColor;
164     print color("red"), "Stop!\n", color("reset");
165     print color("green"), "Go!\n", color("reset");
166    
167     =begin original
168    
169     Or like this:
170    
171     =end original
172    
173     あるいは次のようにも書けます:
174    
175     use Term::ANSIColor qw(:constants);
176     print RED, "Stop!\n", RESET;
177     print GREEN, "Go!\n", RESET;
178    
179     =head2 How do I read just one key without waiting for a return key?
180    
181     (リターンキーを待たずにキーのデータを一つ読み取るには?)
182    
183     =begin original
184    
185     Controlling input buffering is a remarkably system-dependent matter.
186     On many systems, you can just use the B<stty> command as shown in
187     L<perlfunc/getc>, but as you see, that's already getting you into
188     portability snags.
189    
190     =end original
191    
192     入力バッファを制御するのは非常にシステムに依存したやりかたです。
193     多くのシステムでは、L<perlfunc/getc> にあるように
194     B<stty> コマンドを使うことができますが、今書いた通り
195     移植性の問題があるのです。
196    
197     open(TTY, "+</dev/tty") or die "no tty: $!";
198     system "stty cbreak </dev/tty >/dev/tty 2>&1";
199     $key = getc(TTY); # perhaps this works
200     # OR ELSE
201     sysread(TTY, $key, 1); # probably this does
202     system "stty -cbreak </dev/tty >/dev/tty 2>&1";
203    
204     =begin original
205    
206     The L<Term::ReadKey> module from CPAN offers an easy-to-use interface that
207     should be more efficient than shelling out to B<stty> for each key.
208     It even includes limited support for Windows.
209    
210     =end original
211    
212     CPAN にある L<Term::ReadKey> モジュールは、B<stty> をキー毎にシェルに
213     送るよりもより効果的に行ってくれて使うのが簡単なインターフェースを
214     提供します。
215     このモジュールは限定的ながら Windows にも対応しています。
216    
217     use Term::ReadKey;
218     ReadMode('cbreak');
219     $key = ReadKey(0);
220     ReadMode('normal');
221    
222     =begin original
223    
224     However, using the code requires that you have a working C compiler
225     and can use it to build and install a CPAN module. Here's a solution
226     using the standard L<POSIX> module, which is already on your system
227     (assuming your system supports POSIX).
228    
229     =end original
230    
231     しかし、このコードを使うには C コンパイラを使えることが条件であり、かつ
232     CPAN モジュールのビルドとインストールができなければなりません。
233     以下の例は、標準の L<POSIX> モジュールを使った解決策で、
234     あなたの使っているシステムが POSIX をサポートしていれば
235     即使えるものです。
236    
237     use HotKey;
238     $key = readkey();
239    
240     =begin original
241    
242     And here's the C<HotKey> module, which hides the somewhat mystifying calls
243     to manipulate the POSIX termios structures.
244    
245     =end original
246    
247     そして以下の例は、C<HotKey> モジュールを使ったものです; これは POSIX の
248     termio 構造体の操作を包み隠します。
249    
250     # HotKey.pm
251     package HotKey;
252    
253     use strict;
254     use warnings;
255    
256     use parent 'Exporter';
257     our @EXPORT = qw(cbreak cooked readkey);
258    
259     use POSIX qw(:termios_h);
260     my ($term, $oterm, $echo, $noecho, $fd_stdin);
261    
262     $fd_stdin = fileno(STDIN);
263     $term = POSIX::Termios->new();
264     $term->getattr($fd_stdin);
265     $oterm = $term->getlflag();
266    
267     $echo = ECHO | ECHOK | ICANON;
268     $noecho = $oterm & ~$echo;
269    
270     sub cbreak {
271     $term->setlflag($noecho); # ok, so i don't want echo either
272     $term->setcc(VTIME, 1);
273     $term->setattr($fd_stdin, TCSANOW);
274     }
275    
276     sub cooked {
277     $term->setlflag($oterm);
278     $term->setcc(VTIME, 0);
279     $term->setattr($fd_stdin, TCSANOW);
280     }
281    
282     sub readkey {
283     my $key = '';
284     cbreak();
285     sysread(STDIN, $key, 1);
286     cooked();
287     return $key;
288     }
289    
290     END { cooked() }
291    
292     1;
293    
294     =head2 How do I check whether input is ready on the keyboard?
295    
296     (キーの入力待ちがあるかどうかチェックするには?)
297    
298     =begin original
299    
300     The easiest way to do this is to read a key in nonblocking mode with the
301     L<Term::ReadKey> module from CPAN, passing it an argument of -1 to indicate
302     not to block:
303    
304     =end original
305    
306     最も簡単な方法は、CPAN にある L<Term::ReadKey> に対して
307     (ブロックを行わないという意味である)-1 を引数に渡して
308     使用することによって非ブロックモードでキーを読み取るという方法です。
309    
310     use Term::ReadKey;
311    
312     ReadMode('cbreak');
313    
314     if (defined (my $char = ReadKey(-1)) ) {
315     # input was waiting and it was $char
316     } else {
317     # no input was waiting
318     }
319    
320     ReadMode('normal'); # restore normal tty settings
321    
322     =head2 How do I clear the screen?
323    
324     (画面をクリアするには?)
325    
326     =begin original
327    
328     (contributed by brian d foy)
329    
330     =end original
331    
332     (brian d foy によって寄贈されました)
333    
334     =begin original
335    
336     To clear the screen, you just have to print the special sequence
337     that tells the terminal to clear the screen. Once you have that
338     sequence, output it when you want to clear the screen.
339    
340     =end original
341    
342     画面をクリアするには、端末に画面をクリアするように伝える特殊な
343     シーケンスを表示するだけです。
344     このシーケンスが分かれば、画面をクリアしたいときにこれを出力します。
345    
346     =begin original
347    
348     You can use the L<Term::ANSIScreen> module to get the special
349     sequence. Import the C<cls> function (or the C<:screen> tag):
350    
351     =end original
352    
353     この特殊なシーケンスを得るためには L<Term::ANSIScreen> モジュールが
354     使えます。
355     C<cls> 関数 (あるいは C<:screen> タグ) をインポートします:
356    
357     use Term::ANSIScreen qw(cls);
358     my $clear_screen = cls();
359    
360     print $clear_screen;
361    
362     =begin original
363    
364     The L<Term::Cap> module can also get the special sequence if you want
365     to deal with the low-level details of terminal control. The C<Tputs>
366     method returns the string for the given capability:
367    
368     =end original
369    
370     端末制御のための低レベルな詳細を扱いたいなら、
371     L<Term::Cap> から特殊シーケンスを得られます。
372     C<Tputs> メソッドは、与えられた能力のための文字列を返します:
373    
374     use Term::Cap;
375    
376     my $terminal = Term::Cap->Tgetent( { OSPEED => 9600 } );
377     my $clear_string = $terminal->Tputs('cl');
378    
379     print $clear_screen;
380    
381     =begin original
382    
383     On Windows, you can use the L<Win32::Console> module. After creating
384     an object for the output filehandle you want to affect, call the
385     C<Cls> method:
386    
387     =end original
388    
389     Windows では、L<Win32::Console> モジュールが使えます。
390     影響を与えたい出力ファイルハンドルのオブジェクトを作った後、
391     C<Cls> メソッドを呼び出します:
392    
393     Win32::Console;
394    
395     my $OUT = Win32::Console->new(STD_OUTPUT_HANDLE);
396     my $clear_string = $OUT->Cls;
397    
398     print $clear_screen;
399    
400     =begin original
401    
402     If you have a command-line program that does the job, you can call
403     it in backticks to capture whatever it outputs so you can use it
404     later:
405    
406     =end original
407    
408     もしこの処理を行うコマンドラインプログラムがあるなら、そのプログラムが
409     出力するものを得るために逆クォートで呼び出して、後でそれを使うことも
410     できます:
411    
412     my $clear_string = `clear`;
413    
414     print $clear_string;
415    
416     =head2 How do I get the screen size?
417    
418     (画面サイズを得るには?)
419    
420     =begin original
421    
422     If you have L<Term::ReadKey> module installed from CPAN,
423     you can use it to fetch the width and height in characters
424     and in pixels:
425    
426     =end original
427    
428     CPAN にある L<Term::ReadKey> モジュールをインストールしているのなら、
429     文字やピクセルでの幅と高さを得ることができます:
430    
431     use Term::ReadKey;
432     my ($wchar, $hchar, $wpixels, $hpixels) = GetTerminalSize();
433    
434     =begin original
435    
436     This is more portable than the raw C<ioctl>, but not as
437     illustrative:
438    
439     =end original
440    
441     以下の例は生の C<ioctl> よりも移植性がありますが、
442     あまりわかりやすい例ではありません:
443    
444     require 'sys/ioctl.ph';
445     die "no TIOCGWINSZ " unless defined &TIOCGWINSZ;
446     open(my $tty_fh, "+</dev/tty") or die "No tty: $!";
447     unless (ioctl($tty_fh, &TIOCGWINSZ, $winsize='')) {
448     die sprintf "$0: ioctl TIOCGWINSZ (%08x: $!)\n", &TIOCGWINSZ;
449     }
450     my ($row, $col, $xpixel, $ypixel) = unpack('S4', $winsize);
451     print "(row,col) = ($row,$col)";
452     print " (xpixel,ypixel) = ($xpixel,$ypixel)" if $xpixel || $ypixel;
453     print "\n";
454    
455     =head2 How do I ask the user for a password?
456    
457     (ユーザーにパスワードを尋ねるには?)
458    
459     =begin original
460    
461     (This question has nothing to do with the web. See a different
462     FAQ for that.)
463    
464     =end original
465    
466     (この質問は web とは関係ありません。
467     それに関しては 別の FAQ を参照してください。)
468    
469     =begin original
470    
471     There's an example of this in L<perlfunc/crypt>). First, you put the
472     terminal into "no echo" mode, then just read the password normally.
473     You may do this with an old-style C<ioctl()> function, POSIX terminal
474     control (see L<POSIX> or its documentation the Camel Book), or a call
475     to the B<stty> program, with varying degrees of portability.
476    
477     =end original
478    
479     この例が L<perlfunc/crypt> にあります。
480     第一に、端末を“no echo”モードにし、それから通常通りにパスワードを
481     読み込みます。
482     これを、古いスタイルの C<ioctl()> 関数を使ってできますし、あるいは
483     POSIX の端末制御(L<POSIX> と、らくだ本を参照してください)を使うことも、
484     B<stty> プログラムを呼び出すことも可能です(ただしこれは移植性は劣ります)。
485    
486     =begin original
487    
488     You can also do this for most systems using the L<Term::ReadKey> module
489     from CPAN, which is easier to use and in theory more portable.
490    
491     =end original
492    
493     あるいはほとんどのシステムで、CPAN にある L<Term::ReadKey> を使って
494     行うこともできます; これは使うのが簡単で、理論的にはより移植性があります。
495    
496     use Term::ReadKey;
497    
498     ReadMode('noecho');
499     my $password = ReadLine(0);
500    
501     =head2 How do I read and write the serial port?
502    
503     (シリアルポートの読み書きを行うには?)
504    
505     =begin original
506    
507     This depends on which operating system your program is running on. In
508     the case of Unix, the serial ports will be accessible through files in
509     C</dev>; on other systems, device names will doubtless differ.
510     Several problem areas common to all device interaction are the
511     following:
512    
513     =end original
514    
515     これはプログラムを実行するオペレーティングシステムに依存します。
516     UNIX の場合、シリアルポートは C</dev> にあるファイルを通じてアクセスが
517     可能です; 他のシステムでは、デバイス名は異なったものであることでしょう。
518     全てのデバイス操作に共通の問題点として以下のものが挙げられます:
519    
520     =over 4
521    
522     =item lockfiles
523    
524     (ロックファイル)
525    
526     =begin original
527    
528     Your system may use lockfiles to control multiple access. Make sure
529     you follow the correct protocol. Unpredictable behavior can result
530     from multiple processes reading from one device.
531    
532     =end original
533    
534     あなたの使っているシステムは、多重アクセスを制御するためにロック
535     ファイルを使用しているかもしれません。
536     正しい手順に従うようにしてください。
537     予測のつかない振る舞いは一つのデバイスに対する複数のプロセスの読み出しが
538     原因かもしれません。
539    
540     =item open mode
541    
542     (オープンモード)
543    
544     =begin original
545    
546     If you expect to use both read and write operations on the device,
547     you'll have to open it for update (see L<perlfunc/"open"> for
548     details). You may wish to open it without running the risk of
549     blocking by using C<sysopen()> and C<O_RDWR|O_NDELAY|O_NOCTTY> from the
550     L<Fcntl> module (part of the standard perl distribution). See
551     L<perlfunc/"sysopen"> for more on this approach.
552    
553     =end original
554    
555     一つのデバイスに対して、読み込みと書き出しの両方の操作ができることを
556     期待しているのなら、それを更新モード(詳しくは L<perlfunc/"open"> を
557     参照)でオープンする必要があるでしょう。
558     C<sysopen()> と L<Fcntl> モジュールにある C<O_RDWR|O_NDELAY|O_NOCTTY> とを使って
559     ブロッキングする危険性なしにオープンを実行したいと考えるかもしれません。
560     このアプローチに関する詳細は L<perlfunc/"sysopen"> を参照してください。
561    
562     =item end of line
563    
564     (行の末尾)
565    
566     =begin original
567    
568     Some devices will be expecting a "\r" at the end of each line rather
569     than a "\n". In some ports of perl, "\r" and "\n" are different from
570     their usual (Unix) ASCII values of "\015" and "\012". You may have to
571     give the numeric values you want directly, using octal ("\015"), hex
572     ("0x0D"), or as a control-character specification ("\cM").
573    
574     =end original
575    
576     幾つかのデバイスでは、行の終端に "\n" ではなく "\r" を期待しています。
577     perl の移植の一部では、"\r" と "\n" は通常の(UNIX の) ASCII 値である
578     "\015" と "\012" とは異なったものになっています。
579     八進表記 ("\015") や十六進表記("0x0D")、
580     あるいは制御文字指定 ("\cM") を使って
581     直接数値を与える必要があるかもしれません。
582    
583     =begin original
584    
585     print DEV "atv1\012"; # wrong, for some devices
586     print DEV "atv1\015"; # right, for some devices
587    
588     =end original
589    
590     print DEV "atv1\012"; # 一部のデバイスにとっては間違い
591     print DEV "atv1\015"; # 一部のデバイスにとっては正しい
592    
593     =begin original
594    
595     Even though with normal text files a "\n" will do the trick, there is
596     still no unified scheme for terminating a line that is portable
597     between Unix, DOS/Win, and Macintosh, except to terminate I<ALL> line
598     ends with "\015\012", and strip what you don't need from the output.
599     This applies especially to socket I/O and autoflushing, discussed
600     next.
601    
602     =end original
603    
604     通常のテキストファイルでさえも、"\n" はいたずらを行う可能性があります;
605     B<全ての行> を "\015\012" で終わらせ、出力から必要のないものを
606     取り除くということを除いては、UNIX、DOS/Win、Macintosh との間で
607     互換性のある行の終端方法は未だに統一されていません。
608     これは特にソケットの入出力や自動フラッシュで適用されます; これについては
609     次に述べます。
610    
611     =item flushing output
612    
613     =begin original
614    
615     If you expect characters to get to your device when you C<print()> them,
616     you'll want to autoflush that filehandle. You can use C<select()>
617     and the C<$|> variable to control autoflushing (see L<perlvar/$E<verbar>>
618     and L<perlfunc/select>, or L<perlfaq5>, "How do I flush/unbuffer an
619     output filehandle? Why must I do this?"):
620    
621     =end original
622    
623     デバイスに C<print()> した時にそのキャラクタが反映されるようにしたいのなら、
624     そのハンドルを自動フラッシュするようにしたいでしょう。
625     自動フラッシュを制御するのに、C<$|> という変数と、C<select()> を
626     使うことができます(L<perlvar/$E<verbar>>とL<perlfunc/select> または
627     L<perlfaq5> の "How do I flush/unbuffer an output filehandle? Why must
628     I do this?" を参照してください)。
629    
630     my $old_handle = select($dev_fh);
631     $| = 1;
632     select($old_handle);
633    
634     =begin original
635    
636     You'll also see code that does this without a temporary variable, as in
637    
638     =end original
639    
640     以下のように、これを一時変数を使わないで行うコードを見るかもしれません:
641    
642     select((select($deb_handle), $| = 1)[0]);
643    
644     =begin original
645    
646     Or if you don't mind pulling in a few thousand lines
647     of code just because you're afraid of a little C<$|> variable:
648    
649     =end original
650    
651     C<$|> というような変数に戸惑いを感じていて、数千行のプログラムを
652     引っ張りこむことを気にしないのなら以下のようにできます:
653    
654     use IO::Handle;
655     $dev_fh->autoflush(1);
656    
657     =begin original
658    
659     As mentioned in the previous item, this still doesn't work when using
660     socket I/O between Unix and Macintosh. You'll need to hard code your
661     line terminators, in that case.
662    
663     =end original
664    
665     先のアイテムで述べたように、これでもまだ UNIX と Macintosh の間で
666     ソケット I/O を使った場合にはうまく動作しません。
667     その場合には、行の終端をハードコーディングする必要があるでしょう。
668    
669     =item non-blocking input
670    
671     =begin original
672    
673     If you are doing a blocking C<read()> or C<sysread()>, you'll have to
674     arrange for an alarm handler to provide a timeout (see
675     L<perlfunc/alarm>). If you have a non-blocking open, you'll likely
676     have a non-blocking read, which means you may have to use a 4-arg
677     C<select()> to determine whether I/O is ready on that device (see
678     L<perlfunc/"select">.
679    
680     =end original
681    
682     ブロッキング C<read()> やブロッキング C<sysread()> を行うのであれば、
683     タイムアウトを実現するためにalarmハンドラーをアレンジする必要があるでしょう
684     (L<perlfunc/alarm> を参照)。
685     もしノンブロッキング open を持っているのであれば、デバイスが入出力完了の
686     状態であるかどうかを決定するために四つの引数を取る C<select()> を使う必要が
687     あるであろうノンブロッキング read も同様に持っていることでしょう
688     (L<perlfunc/"select">を参照)。
689    
690     =back
691    
692     =begin original
693    
694     While trying to read from his caller-id box, the notorious Jamie
695     Zawinski C<< <jwz@netscape.com> >>, after much gnashing of teeth and
696     fighting with C<sysread>, C<sysopen>, POSIX's C<tcgetattr> business,
697     and various other functions that go bump in the night, finally came up
698     with this:
699    
700     =end original
701    
702     caller-id ボックスから読み出すことに挑戦したことで有名な
703     Jamie Zawinski C<< <jwd@netscape.com> >> は、
704     C<sysread> や C<sysopen>、POSIX の C<tcgetattr> その他さまざまな関数を扱い
705     悪戦苦闘しながら、最終的には以下のようものを作りました:
706    
707     sub open_modem {
708     use IPC::Open2;
709     my $stty = `/bin/stty -g`;
710     open2( \*MODEM_IN, \*MODEM_OUT, "cu -l$modem_device -s2400 2>&1");
711     # starting cu hoses /dev/tty's stty settings, even when it has
712     # been opened on a pipe...
713     system("/bin/stty $stty");
714     $_ = <MODEM_IN>;
715     chomp;
716     if ( !m/^Connected/ ) {
717     print STDERR "$0: cu printed `$_' instead of `Connected'\n";
718     }
719     }
720    
721     =head2 How do I decode encrypted password files?
722    
723     (暗号化されたパスワードファイルを復号化するには?)
724    
725     =begin original
726    
727     You spend lots and lots of money on dedicated hardware, but this is
728     bound to get you talked about.
729    
730     =end original
731    
732     特別なハードウェアに非常に多額のお金を掛けてください;
733     しかしこれはあなたが何について話しているかによります。
734    
735     =begin original
736    
737     Seriously, you can't if they are Unix password files--the Unix
738     password system employs one-way encryption. It's more like hashing
739     than encryption. The best you can do is check whether something else
740     hashes to the same string. You can't turn a hash back into the
741     original string. Programs like Crack can forcibly (and intelligently)
742     try to guess passwords, but don't (can't) guarantee quick success.
743    
744     =end original
745    
746     まじめな話をすると、UNIX のパスワードに対してのものならできません --
747     UNIX のパスワードシステムは一方向の暗号化を採用しています。
748     それは暗号化というよりはむしろハッシュ化といえるものです。
749     あなたがチェックできる最善の方法は、同じ文字列に対するハッシュかどうかを
750     調べることです。
751     ハッシュを元の文字列に戻すことはできません。
752     Crack のようなプログラムは考えられるパスワードを力づくで(そして知的に)
753     試しますが、即座に成功するものを生成することはしません(できません)。
754    
755     =begin original
756    
757     If you're worried about users selecting bad passwords, you should
758     proactively check when they try to change their password (by modifying
759     L<passwd(1)>, for example).
760    
761     =end original
762    
763     もしあなたが、ユーザーが悪いパスワードを選択してしまうことを
764     心配しているのであれば、ユーザーが(たとえば L<passwd(1)> を使って)自分の
765     パスワードを変更しようとしたときに積極的にチェックをすべきでしょう。
766    
767     =head2 How do I start a process in the background?
768    
769     (バックグラウンドでプロセスを起動するには?)
770    
771     =begin original
772    
773     (contributed by brian d foy)
774    
775     =end original
776    
777     (brian d foy によって寄贈されました)
778    
779     =begin original
780    
781     There's not a single way to run code in the background so you don't
782     have to wait for it to finish before your program moves on to other
783     tasks. Process management depends on your particular operating system,
784     and many of the techniques are covered in L<perlipc>.
785    
786     =end original
787    
788     バックグラウンドでコードを実行するための単一の方法というのはないので、
789     あなたのプログラムが他のアスクに移動する前に終わるのを待つ必要は
790     ありません。
791     プロセス管理は使用するオペレーティングシステムに依存していて、
792     多くのテクニックは L<perlipc> にあります。
793    
794     =begin original
795    
796     Several CPAN modules may be able to help, including L<IPC::Open2> or
797     L<IPC::Open3>, L<IPC::Run>, L<Parallel::Jobs>,
798     L<Parallel::ForkManager>, L<POE>, L<Proc::Background>, and
799     L<Win32::Process>. There are many other modules you might use, so
800     check those namespaces for other options too.
801    
802     =end original
803    
804     L<IPC::Open2>, L<IPC::Open3>, L<IPC::Run>, L<Parallel::Jobs>,
805     L<Parallel::ForkManager>, L<POE>, L<Proc::Background>, L<Win32::Process>
806     といった CPAN モジュールが助けになるでしょう。
807     その他にも使えるかもしれない多くのモジュールがありますので、
808     これらの名前空間をチェックしてみてください。
809    
810     =begin original
811    
812     If you are on a Unix-like system, you might be able to get away with a
813     system call where you put an C<&> on the end of the command:
814    
815     =end original
816    
817     Unix 風のシステムを使っているなら、コマンドの最後に C<&> を置くことで
818     システムコールから切り離すことができるかもしれません:
819    
820     system("cmd &")
821    
822     =begin original
823    
824     You can also try using C<fork>, as described in L<perlfunc> (although
825     this is the same thing that many of the modules will do for you).
826    
827     =end original
828    
829     L<perlfunc> に記述されているように、C<fork> を使うこともできます
830     (しかしこれは多くのモジュールがやってくれるのと同じことです)。
831    
832     =over 4
833    
834     =item STDIN, STDOUT, and STDERR are shared
835    
836     (STDIN, STDOUT, STDERR は共有されます)
837    
838     =begin original
839    
840     Both the main process and the backgrounded one (the "child" process)
841     share the same STDIN, STDOUT and STDERR filehandles. If both try to
842     access them at once, strange things can happen. You may want to close
843     or reopen these for the child. You can get around this with
844     C<open>ing a pipe (see L<perlfunc/"open">) but on some systems this
845     means that the child process cannot outlive the parent.
846    
847     =end original
848    
849     主プロセスとバックグラウンドプロセス(子プロセス)で同じ STDIN,
850     STDOUT, STDERR のファイルハンドルが共有されます。
851     両方のプロセスが同時にアクセスしようとすると、
852     おかしな事が発生するかもしれません。
853     子プロセス用のこれらのハンドルを、クローズしたり再オープンしたり
854     したくなるかもしれません。
855     これは、パイプを C<open> することで行えますが、
856     一部のシステムにおいてはこれは子プロセスが親プロセスよりも
857     長生きすることはできないということになります。
858    
859     =item Signals
860    
861     (シグナル)
862    
863     =begin original
864    
865     You'll have to catch the SIGCHLD signal, and possibly SIGPIPE too.
866     SIGCHLD is sent when the backgrounded process finishes. SIGPIPE is
867     sent when you write to a filehandle whose child process has closed (an
868     untrapped SIGPIPE can cause your program to silently die). This is
869     not an issue with C<system("cmd&")>.
870    
871     =end original
872    
873     SIGCHLD シグナルを捕捉する必要があり、可能なら SIGPIPE も
874     捕捉する必要があるでしょう。
875     SIGCHLD はバックグラウンドプロセスが終了したときに送られます。
876     SIGPIPE は既にクローズされている子プロセスを所有するファイルハンドルに
877     書き込みを行ったときに送られます(トラップされていない SIGPIPE は、
878     あなたのプログラムを黙って終わらせてしまうかもしれません)。
879     これは C<system("cmd&")> を使ったときには起こりません。
880    
881     =item Zombies
882    
883     (ゾンビ)
884    
885     =begin original
886    
887     You have to be prepared to "reap" the child process when it finishes.
888    
889     =end original
890    
891     子プロセスが終了したときにそれを“刈り取る”(reap) 準備をする必要があります。
892    
893     $SIG{CHLD} = sub { wait };
894    
895     $SIG{CHLD} = 'IGNORE';
896    
897     =begin original
898    
899     You can also use a double fork. You immediately C<wait()> for your
900     first child, and the init daemon will C<wait()> for your grandchild once
901     it exits.
902    
903     =end original
904    
905     2 重 fork も使えます。
906     あなたは直ちに最初の子に対して C<wait()> し、init デーモンは孫が終了するのを
907     C<wait()> します。
908    
909     unless ($pid = fork) {
910     unless (fork) {
911     exec "what you really wanna do";
912     die "exec failed!";
913     }
914     exit 0;
915     }
916     waitpid($pid, 0);
917    
918     =begin original
919    
920     See L<perlipc/"Signals"> for other examples of code to do this.
921     Zombies are not an issue with C<system("prog &")>.
922    
923     =end original
924    
925     これを行うサンプルは L<perlipc/"Signals"> を参照してください。
926     ゾンビは C<system("prog &")> を使ったときには発生しません。
927    
928     =back
929    
930     =head2 How do I trap control characters/signals?
931    
932     (制御文字やシグナルをトラップするには?)
933    
934     =begin original
935    
936     You don't actually "trap" a control character. Instead, that character
937     generates a signal which is sent to your terminal's currently
938     foregrounded process group, which you then trap in your process.
939     Signals are documented in L<perlipc/"Signals"> and the
940     section on "Signals" in the Camel.
941    
942     =end original
943    
944     実際には制御文字を“トラップ”できません。
945     その代わりに、その文字が生成して
946     端末のフォアグラウンドプロセスに送られることになる
947     シグナルがトラップできます。
948     シグナルは L<perlipc/"Signals"> とらくだ本の "Signal" の章に
949     説明があります。
950    
951     =begin original
952    
953     You can set the values of the C<%SIG> hash to be the functions you want
954     to handle the signal. After perl catches the signal, it looks in C<%SIG>
955     for a key with the same name as the signal, then calls the subroutine
956     value for that key.
957    
958     =end original
959    
960     C<%SIG> ハッシュにシグナルを扱いたい関数をセットできます。
961     perl がシグナルを捕捉した後、perl はシグナルと同じ名前をキーとして C<%SIG> を
962     見て、そのキーの値であるサブルーチンを呼び出します。
963    
964     # as an anonymous subroutine
965    
966     $SIG{INT} = sub { syswrite(STDERR, "ouch\n", 5 ) };
967    
968     # or a reference to a function
969    
970     $SIG{INT} = \&ouch;
971    
972     # or the name of the function as a string
973    
974     $SIG{INT} = "ouch";
975    
976     =begin original
977    
978     Perl versions before 5.8 had in its C source code signal handlers which
979     would catch the signal and possibly run a Perl function that you had set
980     in C<%SIG>. This violated the rules of signal handling at that level
981     causing perl to dump core. Since version 5.8.0, perl looks at C<%SIG>
982     B<after> the signal has been caught, rather than while it is being caught.
983     Previous versions of this answer were incorrect.
984    
985     =end original
986    
987     バージョン 5.8 より前の Perl には、シグナルを受け取って、可能なら C<%SIG>
988     にセットされている Perl の関数を実行する C ソースコードのシグナルハンドラが
989     ありました。
990     これはこのレベルでのシグナルハンドリングのルールに違反していて、perl の
991     コアダンプを引き起こしていました。
992     バージョン 5.8.0 から、perl はシグナルを捕捉している間ではなく、シグナルを
993     捕捉した B<後に> C<%SIG> を見ます。
994     この答えの以前のバージョンは間違っていました。
995    
996     =head2 How do I modify the shadow password file on a Unix system?
997    
998     (UNIX システムのシャドウパスワードファイルを変更するには?)
999    
1000     =begin original
1001    
1002     If perl was installed correctly and your shadow library was written
1003     properly, the C<getpw*()> functions described in L<perlfunc> should in
1004     theory provide (read-only) access to entries in the shadow password
1005     file. To change the file, make a new shadow password file (the format
1006     varies from system to system--see L<passwd(1)> for specifics) and use
1007     C<pwd_mkdb(8)> to install it (see L<pwd_mkdb(8)> for more details).
1008    
1009     =end original
1010    
1011     perl が正しくインストールされていて、かつ、シャドウライブラリが
1012     きちんとインストールされていれば、L<perlfunc> で説明されている
1013     C<getpw*()> 関数がシャドウパスワードファイルに対する(リードオンリーの)
1014     アクセスを提供しています。
1015     ファイルを変更するには、新たなシャドウパスワードファイルを作成して
1016     (フォーマットはシステム毎に異なります--詳しくは L<passwd(1)>
1017     を参照してください)、C<pwd_mkdb(8)> を使ってそれをインストールします
1018     (詳細は L<pwd_mkdb(8)> を参照のこと)。
1019    
1020     =head2 How do I set the time and date?
1021    
1022     (日付や時刻を設定するには?)
1023    
1024     =begin original
1025    
1026     Assuming you're running under sufficient permissions, you should be
1027     able to set the system-wide date and time by running the C<date(1)>
1028     program. (There is no way to set the time and date on a per-process
1029     basis.) This mechanism will work for Unix, MS-DOS, Windows, and NT;
1030     the VMS equivalent is C<set time>.
1031    
1032     =end original
1033    
1034     あなたが十分な権限を持っているとすれば、C<date(1)> プログラムを実行すれば
1035     システム全体の日付や時刻を設定できるはずです
1036     (プロセス毎に日付や時刻を設定する方法はありません)。
1037     この機構は、UNIX、MS-DOS、Windows、NT でうまくいくでしょう。
1038     VMS には等価な C<set time> があります。
1039    
1040     =begin original
1041    
1042     However, if all you want to do is change your time zone, you can
1043     probably get away with setting an environment variable:
1044    
1045     =end original
1046    
1047     あなたのやりたいことがタイムゾーンの変更であるのなら、
1048     環境変数を変更することでそれができるでしょう。
1049    
1050     $ENV{TZ} = "MST7MDT"; # Unixish
1051     $ENV{'SYS$TIMEZONE_DIFFERENTIAL'}="-5" # vms
1052     system('trn', 'comp.lang.perl.misc');
1053    
1054     =head2 How can I sleep() or alarm() for under a second?
1055     X<Time::HiRes> X<BSD::Itimer> X<sleep> X<select>
1056    
1057     (一秒未満の時間に対する sleep() や alarm() をするには?)
1058    
1059     =begin original
1060    
1061     If you want finer granularity than the 1 second that the C<sleep()>
1062     function provides, the easiest way is to use the C<select()> function as
1063     documented in L<perlfunc/"select">. Try the L<Time::HiRes> and
1064     the L<BSD::Itimer> modules (available from CPAN, and starting from
1065     Perl 5.8 L<Time::HiRes> is part of the standard distribution).
1066    
1067     =end original
1068    
1069     C<sleep()> 関数が一秒未満の単位での動作をサポートすることを求めているのなら、
1070     L<perlfunc/"select"> にあるように、C<select()> を使うのが最も単純な方法です。
1071     L<Time::Hires> と L<BSD::Itimer> モジュール(CPAN から利用可能ですし、
1072     Perl 5.8 からは L<Time::HiRes> は標準配布の一部です)も
1073     試してみてください。
1074    
1075     =head2 How can I measure time under a second?
1076     X<Time::HiRes> X<BSD::Itimer> X<sleep> X<select>
1077    
1078     (1 秒未満の時間を計るには?)
1079    
1080     =begin original
1081    
1082     (contributed by brian d foy)
1083    
1084     =end original
1085    
1086     (brian d foy によって寄贈されました)
1087    
1088     =begin original
1089    
1090     The L<Time::HiRes> module (part of the standard distribution as of
1091     Perl 5.8) measures time with the C<gettimeofday()> system call, which
1092     returns the time in microseconds since the epoch. If you can't install
1093     L<Time::HiRes> for older Perls and you are on a Unixish system, you
1094     may be able to call C<gettimeofday(2)> directly. See
1095     L<perlfunc/syscall>.
1096    
1097     =end original
1098    
1099     (Perl 5.8 から標準配布の一部である) L<Time::HiRes> モジュールは、
1100     紀元からのマイクロ秒を返す C<gettimeofday()> システムコールを使って時間を
1101     計測します。
1102     もし古い Perl を使っていて L<Time::HiRes> をインストールできず、
1103     Unixish を使っているなら、C<gettimeofday(2)> を直接使えます。
1104     L<perlfunc/syscall> を参照してください。
1105    
1106     =head2 How can I do an atexit() or setjmp()/longjmp()? (Exception handling)
1107    
1108     (atexit() や setjmp()/longjmp() をするには? (例外処理))
1109    
1110     =begin original
1111    
1112     You can use the C<END> block to simulate C<atexit()>. Each package's
1113     C<END> block is called when the program or thread ends. See the L<perlmod>
1114     manpage for more details about C<END> blocks.
1115    
1116     =end original
1117    
1118     C<atexit()> をシミュレートするのに C<END> ブロックが使えます。
1119     それぞれのパッケージの C<END> ブロックは、プログラムやスレッドの終了時に
1120     呼び出されます。
1121     C<END> ブロックに関するさらなる詳細については L<perlmod> を
1122     参照してください。
1123    
1124     =begin original
1125    
1126     For example, you can use this to make sure your filter program managed
1127     to finish its output without filling up the disk:
1128    
1129     =end original
1130    
1131     例を挙げると、あなたのフィルタープログラムが出力を確実に
1132     ディスクに送るようにするためには以下のようにできます:
1133    
1134     END {
1135     close(STDOUT) || die "stdout close failed: $!";
1136     }
1137    
1138     =begin original
1139    
1140     The C<END> block isn't called when untrapped signals kill the program,
1141     though, so if you use C<END> blocks you should also use
1142    
1143     =end original
1144    
1145     C<END> ブロックは、トラップされないシグナルがプログラムを強制終了させた
1146     場合には呼び出されません; したがって、C<END> ブロックを使う場合には同時に
1147     以下のようにするべきです:
1148    
1149     use sigtrap qw(die normal-signals);
1150    
1151     =begin original
1152    
1153     Perl's exception-handling mechanism is its C<eval()> operator. You
1154     can use C<eval()> as C<setjmp> and C<die()> as C<longjmp>. For
1155     details of this, see the section on signals, especially the time-out
1156     handler for a blocking C<flock()> in L<perlipc/"Signals"> or the
1157     section on "Signals" in I<Programming Perl>.
1158    
1159     =end original
1160    
1161     Perl の例外処理機構は C<eval()> 演算子です。
1162     C<setjmp> として C<eval()> を、C<longjmp> として C<die()> を使うことができます。
1163     これに関する詳細は、シグナルに関するセクション、
1164     特に L<perlipc/"Signals"> にあるブロッキング C<flock()> のための
1165     タイムアウトハンドラーと、 I<Programming Perl> の "Signal" の章を参照してください。
1166    
1167     =begin original
1168    
1169     If exception handling is all you're interested in, use one of the
1170     many CPAN modules that handle exceptions, such as L<Try::Tiny>.
1171    
1172     =end original
1173    
1174     例外処理そのものに興味があるのなら、L<Try::Tiny> のような、例外を
1175     扱うための多くの CPAN モジュールの一つを使ってください。
1176    
1177     =begin original
1178    
1179     If you want the C<atexit()> syntax (and an C<rmexit()> as well), try the
1180     C<AtExit> module available from CPAN.
1181    
1182     =end original
1183    
1184     C<atexit()> 構文(と、C<rmexit()>) が欲しいのなら、CPAN にある
1185     C<AtExit> モジュールを試してみてください。
1186    
1187     =head2 Why doesn't my sockets program work under System V (Solaris)? What does the error message "Protocol not supported" mean?
1188    
1189     (なぜ私のソケットプログラムはSystem V (Solaris) ではうまく動かないの? "Protocol not supported"というエラーメッセージの意味するところは?)
1190    
1191     =begin original
1192    
1193     Some Sys-V based systems, notably Solaris 2.X, redefined some of the
1194     standard socket constants. Since these were constant across all
1195     architectures, they were often hardwired into perl code. The proper
1196     way to deal with this is to "use Socket" to get the correct values.
1197    
1198     =end original
1199    
1200     一部の System 5 ベースのシステム、特に Solaris 2.x では標準のソケット定数の
1201     幾つかが再定義されています。
1202     これらの定数は全てのアーキテクチャに渡るものであったので、
1203     しばしば perl コードにハードコーディングされています。
1204     これに対処する適切な方法は正しい値を得るために "use Socket" とすることです。
1205    
1206     =begin original
1207    
1208     Note that even though SunOS and Solaris are binary compatible, these
1209     values are different. Go figure.
1210    
1211     =end original
1212    
1213     SunOS と Solaris とではバイナリ互換性があるにも関らず、
1214     これらの値が異なるということに注意してください。
1215     不思議なことです。
1216    
1217     =head2 How can I call my system's unique C functions from Perl?
1218    
1219     (Perl から私のシステムに固有の C 関数を呼び出すには?)
1220    
1221     =begin original
1222    
1223     In most cases, you write an external module to do it--see the answer
1224     to "Where can I learn about linking C with Perl? [h2xs, xsubpp]".
1225     However, if the function is a system call, and your system supports
1226     C<syscall()>, you can use the C<syscall> function (documented in
1227     L<perlfunc>).
1228    
1229     =end original
1230    
1231     ほとんどの場合、その方法は外部モジュールを作るというものです --
1232     "Where can I learn about linking C with Perl? [h2xs, xsubpp]"
1233     の回答を参照してください。
1234     ただし、その関数がシステムコールでありあなたの使っているシステムが
1235     C<syscall()> をサポートしているのであれば、
1236     C<syscall> 関数(L<perlfunc> に説明があります)を使うことができます。
1237    
1238     =begin original
1239    
1240     Remember to check the modules that came with your distribution, and
1241     CPAN as well--someone may already have written a module to do it. On
1242     Windows, try L<Win32::API>. On Macs, try L<Mac::Carbon>. If no module
1243     has an interface to the C function, you can inline a bit of C in your
1244     Perl source with L<Inline::C>.
1245    
1246     =end original
1247    
1248     一緒に配布されたモジュールや CPAN にあるモジュールをチェックすることを
1249     忘れないでください--誰かが求めるモジュールを既に作っているかもしれません。
1250     Windows では、L<Win32::API> を試してください。
1251     Mac では、L<Mac::Carbon> を試してください。
1252     C 関数へのインターフェースを持つモジュールがなければ、
1253     L<Inline::C> を使って Perl のソースコードにちょっとした C のコードを
1254     インライン化できます。
1255    
1256     =head2 Where do I get the include files to do ioctl() or syscall()?
1257    
1258     (ioctl() や syscall() で使うための include ファイルはどこで入手できますか?)
1259    
1260     =begin original
1261    
1262     Historically, these would be generated by the L<h2ph> tool, part of the
1263     standard perl distribution. This program converts C<cpp(1)> directives
1264     in C header files to files containing subroutine definitions, like
1265     C<SYS_getitimer()>, which you can use as arguments to your functions.
1266     It doesn't work perfectly, but it usually gets most of the job done.
1267     Simple files like F<errno.h>, F<syscall.h>, and F<socket.h> were fine,
1268     but the hard ones like F<ioctl.h> nearly always need to be hand-edited.
1269     Here's how to install the *.ph files:
1270    
1271     =end original
1272    
1273     伝統的に、これらのファイルは標準配布に含まれる L<h2ph> というツールによって
1274     生成されるものです。
1275     このプログラムは C のヘッダーファイルにある C<cpp(1)> 指示子を
1276     C<SYS_getitimer()> のような、関数に対する引数として使うことのできる
1277     サブルーチン定義を含むファイルに変換するものです。
1278     これは完璧なものではありませんが、ほとんどの場合には十分な仕事を行います。
1279     F<errno.h>, F<syscall.h>, F<socket.h> のような単純なファイルはよいのですが、
1280     F<ioctl.h> のように難しいものはほとんど常に手で編集する必要があります。
1281     以下の手順は、*.ph ファイルをインストールするためのものです。
1282    
1283     1. Become the super-user
1284     2. cd /usr/include
1285     3. h2ph *.h */*.h
1286    
1287     =begin original
1288    
1289     If your system supports dynamic loading, for reasons of portability and
1290     sanity you probably ought to use L<h2xs> (also part of the standard perl
1291     distribution). This tool converts C header files to Perl extensions.
1292     See L<perlxstut> for how to get started with L<h2xs>.
1293    
1294     =end original
1295    
1296     あなたの使っているシステムが動的ローディングをサポートしているのであれば、
1297     移植性と健全性(sanity)のために、L<h2xs> を使うべきでしょう
1298     (これも標準の perl 配布キットに含まれています)。
1299     このツールは、C のヘッダーファイルを Perl のエクステンションに変換します。
1300     L<h2xs> の使い方は L<perlxstut> を参照してください。
1301    
1302     =begin original
1303    
1304     If your system doesn't support dynamic loading, you still probably
1305     ought to use L<h2xs>. See L<perlxstut> and L<ExtUtils::MakeMaker> for
1306     more information (in brief, just use B<make perl> instead of a plain
1307     B<make> to rebuild perl with a new static extension).
1308    
1309     =end original
1310    
1311     あなたの使っているシステムが動的ローディングをサポートしていない
1312     場合であっても、やはり L<h2xs> を使うべきでしょう。
1313     より詳しい情報は L<perlxstut> と L<ExtUtils::MakeMaker> を参照してください
1314     (簡単に言うと、新しい静的エクステションを伴った perl を再ビルドするのに
1315     通常の B<make> を使うのではなく、B<make perl> を使うだけです)。
1316    
1317     =head2 Why do setuid perl scripts complain about kernel problems?
1318    
1319     (なぜ setuid された perl スクリプトはカーネルの問題について文句を言うのでしょうか?)
1320    
1321     =begin original
1322    
1323     Some operating systems have bugs in the kernel that make setuid
1324     scripts inherently insecure. Perl gives you a number of options
1325     (described in L<perlsec>) to work around such systems.
1326    
1327     =end original
1328    
1329     幾つかのオペレーティングシステムは、setuid スクリプトを本質的に
1330     安全でなくするようなカーネルのバグを抱えています。
1331     Perl は、そういったシステムに対処して動作させるための幾つかのオプションを
1332     持っています(L<perlsec> に説明があります)。
1333    
1334     =head2 How can I open a pipe both to and from a command?
1335    
1336     (あるコマンドに対する双方向のパイプをオープンするには?)
1337    
1338     =begin original
1339    
1340     The L<IPC::Open2> module (part of the standard perl distribution) is
1341     an easy-to-use approach that internally uses C<pipe()>, C<fork()>, and
1342     C<exec()> to do the job. Make sure you read the deadlock warnings in
1343     its documentation, though (see L<IPC::Open2>). See
1344     L<perlipc/"Bidirectional Communication with Another Process"> and
1345     L<perlipc/"Bidirectional Communication with Yourself">
1346    
1347     =end original
1348    
1349     L<IPC::Open2> モジュール(標準の perl の配布に含まれています)は内部的に
1350     C<pipe()>, C<fork()>, C<exec()> を使った使いやすい手法です。
1351     ただし、ドキュメントにあるデッドロックの警告をよく読んでください
1352     (L<IPC::Open2>を参照)。
1353     L<perlipc/"Bidirectional Communication with Another Process"> と
1354     L<perlipc/"Bidirectional Communication with Yourself"> も参照してください。
1355    
1356     =begin original
1357    
1358     You may also use the L<IPC::Open3> module (part of the standard perl
1359     distribution), but be warned that it has a different order of
1360     arguments from L<IPC::Open2> (see L<IPC::Open3>).
1361    
1362     =end original
1363    
1364     L<IPC::Open3> モジュール(標準配布パッケージに含まれています)も使えますが、
1365     これは L<IPC::Open2> とは引数の順序が違うということに注意してください
1366     (L<IPC::Open3> を参照してください)。
1367    
1368     =head2 Why can't I get the output of a command with system()?
1369    
1370     (なぜ system() を使ったコマンドの出力を得ることができないのでしょうか?)
1371    
1372     =begin original
1373    
1374     You're confusing the purpose of C<system()> and backticks (``). C<system()>
1375     runs a command and returns exit status information (as a 16 bit value:
1376     the low 7 bits are the signal the process died from, if any, and
1377     the high 8 bits are the actual exit value). Backticks (``) run a
1378     command and return what it sent to STDOUT.
1379    
1380     =end original
1381    
1382     C<system()> の目的と逆クォートの目的を混同しているのでしょう。
1383     C<system()> はコマンドを実行して、終了ステータス情報(16bit 値として:
1384     下位 7bit は(もしあれば)終了したプロセスからのシグナルで、上位 8bit は
1385     実際の終了ステータス)を返します。
1386     逆クォートはコマンドを実行し、そのコマンドが STDOUT に送ったものを返します。
1387    
1388     my $exit_status = system("mail-users");
1389     my $output_string = `ls`;
1390    
1391     =head2 How can I capture STDERR from an external command?
1392    
1393     (外部コマンドの STDERR を捕捉するには?)
1394    
1395     =begin original
1396    
1397     There are three basic ways of running external commands:
1398    
1399     =end original
1400    
1401     外部コマンドを実行する基本的なやり方が三つあります:
1402    
1403     system $cmd; # using system()
1404     my $output = `$cmd`; # using backticks (``)
1405     open (my $pipe_fh, "$cmd |"); # using open()
1406    
1407     =begin original
1408    
1409     With C<system()>, both STDOUT and STDERR will go the same place as the
1410     script's STDOUT and STDERR, unless the C<system()> command redirects them.
1411     Backticks and C<open()> read B<only> the STDOUT of your command.
1412    
1413     =end original
1414    
1415     C<system()> を使った場合の STDOUT と STDERR は、C<system()> コマンドが
1416     リダイレクトを行っていない限りはそれぞれスクリプトが使っていた
1417     STDOUT と STDERR へ出力されます。
1418     逆クォートと C<open()> はコマンドの STDOUT B<だけを> 読み込みます。
1419    
1420     =begin original
1421    
1422     You can also use the C<open3()> function from L<IPC::Open3>. Benjamin
1423     Goldberg provides some sample code:
1424    
1425     =end original
1426    
1427     L<IPC::Open3> の C<open3()> 関数も使えます。
1428     Benjamin Goldberg がいくつかのサンプルコードを提供しています:
1429    
1430     =begin original
1431    
1432     To capture a program's STDOUT, but discard its STDERR:
1433    
1434     =end original
1435    
1436     あるプログラムの STDOUT は捕捉したいが、STDERR は捨てたい場合:
1437    
1438     use IPC::Open3;
1439     use File::Spec;
1440     use Symbol qw(gensym);
1441     open(NULL, ">", File::Spec->devnull);
1442     my $pid = open3(gensym, \*PH, ">&NULL", "cmd");
1443     while( <PH> ) { }
1444     waitpid($pid, 0);
1445    
1446     =begin original
1447    
1448     To capture a program's STDERR, but discard its STDOUT:
1449    
1450     =end original
1451    
1452     あるプログラムの STDERR は捕捉したいが、STDOUT は捨てたい場合:
1453    
1454     use IPC::Open3;
1455     use File::Spec;
1456     use Symbol qw(gensym);
1457     open(NULL, ">", File::Spec->devnull);
1458     my $pid = open3(gensym, ">&NULL", \*PH, "cmd");
1459     while( <PH> ) { }
1460     waitpid($pid, 0);
1461    
1462     =begin original
1463    
1464     To capture a program's STDERR, and let its STDOUT go to our own STDERR:
1465    
1466     =end original
1467    
1468     プログラムの STDERR を捕捉してその STDOUT を自身の STDERR に送るには:
1469    
1470     use IPC::Open3;
1471     use Symbol qw(gensym);
1472     my $pid = open3(gensym, ">&STDERR", \*PH, "cmd");
1473     while( <PH> ) { }
1474     waitpid($pid, 0);
1475    
1476     =begin original
1477    
1478     To read both a command's STDOUT and its STDERR separately, you can
1479     redirect them to temp files, let the command run, then read the temp
1480     files:
1481    
1482     =end original
1483    
1484     あるコマンドの STDOUT と STDERR を別々に読み込みたい場合、それをテンポラリ
1485     ファイルにリダイレクトして、コマンドを実行して、テンポラリファイルから
1486     読み込みます:
1487    
1488     use IPC::Open3;
1489     use Symbol qw(gensym);
1490     use IO::File;
1491     local *CATCHOUT = IO::File->new_tmpfile;
1492     local *CATCHERR = IO::File->new_tmpfile;
1493     my $pid = open3(gensym, ">&CATCHOUT", ">&CATCHERR", "cmd");
1494     waitpid($pid, 0);
1495     seek $_, 0, 0 for \*CATCHOUT, \*CATCHERR;
1496     while( <CATCHOUT> ) {}
1497     while( <CATCHERR> ) {}
1498    
1499     =begin original
1500    
1501     But there's no real need for B<both> to be tempfiles... the following
1502     should work just as well, without deadlocking:
1503    
1504     =end original
1505    
1506     しかし、実際には B<両方を> テンポラリファイルにするする必要はありません…。
1507     以下のものもデッドロックなしにうまく動きます:
1508    
1509     use IPC::Open3;
1510     use Symbol qw(gensym);
1511     use IO::File;
1512     local *CATCHERR = IO::File->new_tmpfile;
1513     my $pid = open3(gensym, \*CATCHOUT, ">&CATCHERR", "cmd");
1514     while( <CATCHOUT> ) {}
1515     waitpid($pid, 0);
1516     seek CATCHERR, 0, 0;
1517     while( <CATCHERR> ) {}
1518    
1519     =begin original
1520    
1521     And it'll be faster, too, since we can begin processing the program's
1522     stdout immediately, rather than waiting for the program to finish.
1523    
1524     =end original
1525    
1526     そして、これはプログラムの終了を待つのではなく、プログラムの標準出力を直ちに
1527     処理するので、より速いはずです。
1528    
1529     =begin original
1530    
1531     With any of these, you can change file descriptors before the call:
1532    
1533     =end original
1534    
1535     これらのどれでも、呼び出しの前にファイル記述子を変更できます:
1536    
1537     open(STDOUT, ">logfile");
1538     system("ls");
1539    
1540     =begin original
1541    
1542     or you can use Bourne shell file-descriptor redirection:
1543    
1544     =end original
1545    
1546     Bourne シェルのファイル記述子リダイレクションを使うこともできます:
1547    
1548     $output = `$cmd 2>some_file`;
1549     open (PIPE, "cmd 2>some_file |");
1550    
1551     =begin original
1552    
1553     You can also use file-descriptor redirection to make STDERR a
1554     duplicate of STDOUT:
1555    
1556     =end original
1557    
1558     同様に、STDERR を STDOUT の複製にするためにファイル記述子
1559     リダイレクションを使うこともできます。
1560    
1561     $output = `$cmd 2>&1`;
1562     open (PIPE, "cmd 2>&1 |");
1563    
1564     =begin original
1565    
1566     Note that you I<cannot> simply open STDERR to be a dup of STDOUT
1567     in your Perl program and avoid calling the shell to do the redirection.
1568     This doesn't work:
1569    
1570     =end original
1571    
1572     STDOUT の複製のために、Perl プログラムの中で単純に STDERR を
1573     オープンすることは B<できない> ということと、リダイレクトのための
1574     シェルの呼び出しを避けることはできないということに注意してください。
1575     以下の例はうまくいきません:
1576    
1577     open(STDERR, ">&STDOUT");
1578     $alloutput = `cmd args`; # stderr still escapes
1579    
1580     =begin original
1581    
1582     This fails because the C<open()> makes STDERR go to where STDOUT was
1583     going at the time of the C<open()>. The backticks then make STDOUT go to
1584     a string, but don't change STDERR (which still goes to the old
1585     STDOUT).
1586    
1587     =end original
1588    
1589     これは C<open()> が、STDERR を(C<open()> が呼び出された時点で)STDOUT が
1590     使っていた場所に対応するようにするので失敗します。
1591     その後で逆クォートは STDOUT(に出力された内容)を文字列にしますが、
1592     STDERR を変更することはしません(これは以前の STDOUT が指していたところです)。
1593    
1594     =begin original
1595    
1596     Note that you I<must> use Bourne shell (C<sh(1)>) redirection syntax in
1597     backticks, not C<csh(1)>! Details on why Perl's C<system()> and backtick
1598     and pipe opens all use the Bourne shell are in the
1599     F<versus/csh.whynot> article in the "Far More Than You Ever Wanted To
1600     Know" collection in L<http://www.cpan.org/misc/olddoc/FMTEYEWTK.tgz> . To
1601     capture a command's STDERR and STDOUT together:
1602    
1603     =end original
1604    
1605     backticlsの中では、C<csh(1)> のリダイレクト構文ではなく、Bourne shell
1606     (C<sh(1)>) のリダイレクト構文を B<使わなければならない> ということに
1607     注意してください!
1608     なぜ Perl の C<system()>、逆クォート、パイプオープンの全てで Bourne シェルの
1609     ものを使うかは L<http://www.cpan.org/misc/olddoc/FMTEYEWTK.tgz> にある
1610     "Far More Than You Ever Wanted To Know" の F<versus/csh.whynot> という記事で
1611     説明されています。
1612     あるコマンドの標準出力と標準エラー出力を両方とも捉えるには:
1613    
1614     $output = `cmd 2>&1`; # either with backticks
1615     $pid = open(PH, "cmd 2>&1 |"); # or with an open pipe
1616     while (<PH>) { } # plus a read
1617    
1618     =begin original
1619    
1620     To capture a command's STDOUT but discard its STDERR:
1621    
1622     =end original
1623    
1624     あるコマンドの標準出力を捉え、標準エラー出力を捨てるには:
1625    
1626     $output = `cmd 2>/dev/null`; # either with backticks
1627     $pid = open(PH, "cmd 2>/dev/null |"); # or with an open pipe
1628     while (<PH>) { } # plus a read
1629    
1630     =begin original
1631    
1632     To capture a command's STDERR but discard its STDOUT:
1633    
1634     =end original
1635    
1636     あるコマンドの標準エラー出力を捉え、標準出力を捨てるには:
1637    
1638     $output = `cmd 2>&1 1>/dev/null`; # either with backticks
1639     $pid = open(PH, "cmd 2>&1 1>/dev/null |"); # or with an open pipe
1640     while (<PH>) { } # plus a read
1641    
1642     =begin original
1643    
1644     To exchange a command's STDOUT and STDERR in order to capture the STDERR
1645     but leave its STDOUT to come out our old STDERR:
1646    
1647     =end original
1648    
1649     あるコマンドの標準エラー出力を捉えるために
1650     標準出力と標準エラー出力を入れ替えるが、標準出力に
1651     古い標準エラー出力に出るようにするには:
1652    
1653     $output = `cmd 3>&1 1>&2 2>&3 3>&-`; # either with backticks
1654     $pid = open(PH, "cmd 3>&1 1>&2 2>&3 3>&-|");# or with an open pipe
1655     while (<PH>) { } # plus a read
1656    
1657     =begin original
1658    
1659     To read both a command's STDOUT and its STDERR separately, it's easiest
1660     to redirect them separately to files, and then read from those files
1661     when the program is done:
1662    
1663     =end original
1664    
1665     標準出力と標準エラー出力の両方を分けて読み出すには、
1666     別々のファイルにリダイレクトしてしまって、
1667     その後でそのファイルをプログラムから読むというのが最も簡単な方法です:
1668    
1669     system("program args 1>program.stdout 2>program.stderr");
1670    
1671     =begin original
1672    
1673     Ordering is important in all these examples. That's because the shell
1674     processes file descriptor redirections in strictly left to right order.
1675    
1676     =end original
1677    
1678     これらの例では順序が重要です。
1679     なぜなら、シェルがリダイレクトのためのファイル記述子を処理する順序は
1680     正確に左から右へという順になっているからです。
1681    
1682     system("prog args 1>tmpfile 2>&1");
1683     system("prog args 2>&1 1>tmpfile");
1684    
1685     =begin original
1686    
1687     The first command sends both standard out and standard error to the
1688     temporary file. The second command sends only the old standard output
1689     there, and the old standard error shows up on the old standard out.
1690    
1691     =end original
1692    
1693     最初のコマンドは標準出力と標準エラー出力の両方を一時ファイルに送ります。
1694     二番目のコマンドは古い標準出力だけをファイルへと送り、古い標準エラー出力は
1695     古い標準出力へと送り出します。
1696    
1697     =head2 Why doesn't open() return an error when a pipe open fails?
1698    
1699     (なぜ open() は パイプのオープンに失敗したときにエラーを返さないのでしょうか?)
1700    
1701     =begin original
1702    
1703     If the second argument to a piped C<open()> contains shell
1704     metacharacters, perl C<fork()>s, then C<exec()>s a shell to decode the
1705     metacharacters and eventually run the desired program. If the program
1706     couldn't be run, it's the shell that gets the message, not Perl. All
1707     your Perl program can find out is whether the shell itself could be
1708     successfully started. You can still capture the shell's STDERR and
1709     check it for error messages. See L<"How can I capture STDERR from an
1710     external command?"> elsewhere in this document, or use the
1711     L<IPC::Open3> module.
1712    
1713     =end original
1714    
1715     パイプされた C<open()> の第二引数にシェルのメタ文字が含まれている場合、
1716     perl は C<fork()> し、メタ文字をデコードするためにシェルを C<exec()> し、
1717     最終的に必要なプログラムを実行します。
1718     このプログラムが実行できない場合、メッセージを得るのはシェルであって、
1719     Perl ではありません。
1720     あなたの Perl プログラムがわかることはシェル自身が正しく開始されたかどうか
1721     だけです。
1722     エラーメッセージのためにシェルの STDERR を捕捉してチェックするという方法は
1723     あります。
1724     この文書の別の場所にある L<"How can I capture STDERR from an external
1725     command?"> を参照するか、L<IPC::Open3> モジュールを使ってください。
1726    
1727     =begin original
1728    
1729     If there are no shell metacharacters in the argument of C<open()>, Perl
1730     runs the command directly, without using the shell, and can correctly
1731     report whether the command started.
1732    
1733     =end original
1734    
1735     C<open()> の引数にシェルのメタ文字がないなら、Perl はコマンドをシェルを使わずに
1736     直接実行し、コマンドが開始したかどうかを正しく報告できます。
1737    
1738     =head2 What's wrong with using backticks in a void context?
1739    
1740     (無効コンテキストで逆クォートを使うことのなにが悪いのでしょうか?)
1741    
1742     =begin original
1743    
1744     Strictly speaking, nothing. Stylistically speaking, it's not a good
1745     way to write maintainable code. Perl has several operators for
1746     running external commands. Backticks are one; they collect the output
1747     from the command for use in your program. The C<system> function is
1748     another; it doesn't do this.
1749    
1750     =end original
1751    
1752     厳密に言えばありません。
1753     形式的に言えば、保守しやすいコードを書くための良い方法ではありません。
1754     Perl は外部コマンドを実行するためのいくつかの演算子があります。
1755     逆クォートはその一つです; これはコマンドからの出力を、自身のプログラムで
1756     使うために収集します。
1757     C<system> 関数はもう一つのものです; これはコマンドからの出力を収集しません。
1758    
1759     =begin original
1760    
1761     Writing backticks in your program sends a clear message to the readers
1762     of your code that you wanted to collect the output of the command.
1763     Why send a clear message that isn't true?
1764    
1765     =end original
1766    
1767     プログラム中に逆クォートを書くことで、そのコマンドの出力を使いたいという
1768     はっきりしたメッセージをあなたのコードの読者に送ります。
1769     なぜ正しくないはっきりしたメッセージを送るのですか?
1770    
1771     =begin original
1772    
1773     Consider this line:
1774    
1775     =end original
1776    
1777     以下のような行を考えてみましょう:
1778    
1779     `cat /etc/termcap`;
1780    
1781     =begin original
1782    
1783     You forgot to check C<$?> to see whether the program even ran
1784     correctly. Even if you wrote
1785    
1786     =end original
1787    
1788     プログラムが正しく実行されたかどうかを確認するために
1789     C<$?> を見るのを忘れています。
1790     以下のように書いたとしても
1791    
1792     print `cat /etc/termcap`;
1793    
1794     =begin original
1795    
1796     this code could and probably should be written as
1797    
1798     =end original
1799    
1800     このコードは、以下のように書くべきでしょう
1801    
1802     system("cat /etc/termcap") == 0
1803     or die "cat program failed!";
1804    
1805     =begin original
1806    
1807     which will echo the cat command's output as it is generated, instead
1808     of waiting until the program has completed to print it out. It also
1809     checks the return value.
1810    
1811     =end original
1812    
1813     これは、プログラムが出力を終えるのを待つのではなく、cat コマンドの出力が
1814     生成される毎にエコーします。
1815     これはまたその戻り値のチェックも行います。
1816    
1817     =begin original
1818    
1819     C<system> also provides direct control over whether shell wildcard
1820     processing may take place, whereas backticks do not.
1821    
1822     =end original
1823    
1824     system() はまた、シェルのワイルドカード処理を行えるかどうかを直接
1825     制御しますが、逆クォートはそういった制御は行いません。
1826    
1827     =head2 How can I call backticks without shell processing?
1828    
1829     (シェルの処理をせずに逆クォートを呼び出すには?)
1830    
1831     =begin original
1832    
1833     This is a bit tricky. You can't simply write the command
1834     like this:
1835    
1836     =end original
1837    
1838     ちょっとトリッキーになります。
1839     単純に以下のようにはコマンドを書けません:
1840    
1841     @ok = `grep @opts '$search_string' @filenames`;
1842    
1843     =begin original
1844    
1845     As of Perl 5.8.0, you can use C<open()> with multiple arguments.
1846     Just like the list forms of C<system()> and C<exec()>, no shell
1847     escapes happen.
1848    
1849     =end original
1850    
1851     Perl 5.8.0 から、複数の引数の C<open()> を使えます。
1852     リスト形式の C<system()> や C<exec()> と同様に、シェルエスケープは
1853     起きません。
1854    
1855     open( GREP, "-|", 'grep', @opts, $search_string, @filenames );
1856     chomp(@ok = <GREP>);
1857     close GREP;
1858    
1859     =begin original
1860    
1861     You can also:
1862    
1863     =end original
1864    
1865     以下のようにもできます:
1866    
1867     my @ok = ();
1868     if (open(GREP, "-|")) {
1869     while (<GREP>) {
1870     chomp;
1871     push(@ok, $_);
1872     }
1873     close GREP;
1874     } else {
1875     exec 'grep', @opts, $search_string, @filenames;
1876     }
1877    
1878     =begin original
1879    
1880     Just as with C<system()>, no shell escapes happen when you C<exec()> a
1881     list. Further examples of this can be found in L<perlipc/"Safe Pipe
1882     Opens">.
1883    
1884     =end original
1885    
1886     C<system()> を使ったときと同じく、シェルエスケープは C<exec()> のリストに
1887     対して行われません。
1888     さらなる例が L<perlipc/"Safe Pipe Opens"> にあります。
1889    
1890     =begin original
1891    
1892     Note that if you're using Windows, no solution to this vexing issue is
1893     even possible. Even though Perl emulates C<fork()>, you'll still be
1894     stuck, because Windows does not have an argc/argv-style API.
1895    
1896     =end original
1897    
1898     もしあなたが Windows を使っているのなら、この悩ましい問題を
1899     解決する方法は全くありません。
1900     たとえ Perl が C<fork()> をエミュレートしたとしても、まだうまくいきません;
1901     なぜならマイクロソフトは argc/argv 形式の API を提供していないからです。
1902    
1903     =head2 Why can't my script read from STDIN after I gave it EOF (^D on Unix, ^Z on MS-DOS)?
1904    
1905     (なぜ EOF(UNIX での^D、MS-DOS での^Z)を受け取った後で STDIN から読み込むことができないの?)
1906    
1907     =begin original
1908    
1909     This happens only if your perl is compiled to use stdio instead of
1910     perlio, which is the default. Some (maybe all?) stdios set error and
1911     eof flags that you may need to clear. The L<POSIX> module defines
1912     C<clearerr()> that you can use. That is the technically correct way to
1913     do it. Here are some less reliable workarounds:
1914    
1915     =end original
1916    
1917     これは、デフォルトである perlio ではなく、stdio を使ってコンパイルされた
1918     perl でのみ起こります。
1919     一部の(おそらく全ての?) stdio ではエラーフラグと eof フラグがセットされ、
1920     それをクリアする必要があるからです。
1921     L<POSIX> モジュールはこのために使える C<clearerr()> を定義しています。
1922     これは、フラグをクリアするための技術的に正しい方法です。
1923     以下の方法はこれよりは信頼性にかけるやり方です:
1924    
1925     =over 4
1926    
1927     =item 1
1928    
1929     =begin original
1930    
1931     Try keeping around the seekpointer and go there, like this:
1932    
1933     =end original
1934    
1935     以下の例のように、シークポインタを保存しておいてそこへ移動します:
1936    
1937     my $where = tell($log_fh);
1938     seek($log_fh, $where, 0);
1939    
1940     =item 2
1941    
1942     =begin original
1943    
1944     If that doesn't work, try seeking to a different part of the file and
1945     then back.
1946    
1947     =end original
1948    
1949     上のやりかたがだめなら、一度ファイルの別の部分にシークして、それから
1950     元の場所にシークするようにします。
1951    
1952     =item 3
1953    
1954     =begin original
1955    
1956     If that doesn't work, try seeking to a different part of
1957     the file, reading something, and then seeking back.
1958    
1959     =end original
1960    
1961     これでもだめなら、ファイルの別の部分にシークして何かを読み出し、それから
1962     元の場所にシークするようにします。
1963    
1964     =item 4
1965    
1966     =begin original
1967    
1968     If that doesn't work, give up on your stdio package and use sysread.
1969    
1970     =end original
1971    
1972     これでだめなら stdio パッケージで行うことはあきらめて、sysread を使います。
1973    
1974     =back
1975    
1976     =head2 How can I convert my shell script to perl?
1977    
1978     (私のシェルスクリプトを perl に変換するには?)
1979    
1980     =begin original
1981    
1982     Learn Perl and rewrite it. Seriously, there's no simple converter.
1983     Things that are awkward to do in the shell are easy to do in Perl, and
1984     this very awkwardness is what would make a shell->perl converter
1985     nigh-on impossible to write. By rewriting it, you'll think about what
1986     you're really trying to do, and hopefully will escape the shell's
1987     pipeline datastream paradigm, which while convenient for some matters,
1988     causes many inefficiencies.
1989    
1990     =end original
1991    
1992     Perl を学び、自分で書き直しましょう。
1993     まじめな話、単純なコンバータというものはありません。
1994     シェルで行うには不格好になるようなことも Perl では簡単に行うことができ、
1995     そして、このとても不格好なことがシェル→ perl コンバーターを作製することを
1996     ほとんど不可能なことにしているのです。
1997     自分で書き換えをすることで、あなたは自分が本当に試すべきことについて
1998     考えるようになり、シェルの(便利なときもあるものの多くの非効率を持ち込む)
1999     パイプラインデータストリームパラダイムから逃れることができるでしょう。
2000    
2001     =head2 Can I use perl to run a telnet or ftp session?
2002    
2003     (telnet や ftp のセッションを実行するために perl を使うことができますか?)
2004    
2005     =begin original
2006    
2007     Try the L<Net::FTP>, L<TCP::Client>, and L<Net::Telnet> modules
2008     (available from CPAN).
2009     L<http://www.cpan.org/scripts/netstuff/telnet.emul.shar> will also help
2010     for emulating the telnet protocol, but L<Net::Telnet> is quite
2011     probably easier to use.
2012    
2013     =end original
2014    
2015     L<Net::FTP>, L<TCP::Client>, L<Net::Telnet> といったモジュール(CPAN で
2016     入手可能です)を試してみてください。
2017     L<http://www.cpan.org/scripts/netstuff/telnet.emul.shar> も
2018     telnet プロトコルをエミュレートする助けになるでしょうが、L<Net::Telnet> は
2019     使うのがとても簡単です。
2020    
2021     =begin original
2022    
2023     If all you want to do is pretend to be telnet but don't need
2024     the initial telnet handshaking, then the standard dual-process
2025     approach will suffice:
2026    
2027     =end original
2028    
2029     あなたのやりたいことが telnet のふりをすることであっても初期化時の
2030     telnet のハンドシェイクを必要としないのであれば、
2031     標準的な dual-process アプローチで十分でしょう。
2032    
2033     use IO::Socket; # new in 5.004
2034     my $handle = IO::Socket::INET->new('www.perl.com:80')
2035     or die "can't connect to port 80 on www.perl.com $!";
2036     $handle->autoflush(1);
2037     if (fork()) { # XXX: undef means failure
2038     select($handle);
2039     print while <STDIN>; # everything from stdin to socket
2040     } else {
2041     print while <$handle>; # everything from socket to stdout
2042     }
2043     close $handle;
2044     exit;
2045    
2046     =head2 How can I write expect in Perl?
2047    
2048     ( Perl で expect を書くには?)
2049    
2050     =begin original
2051    
2052     Once upon a time, there was a library called F<chat2.pl> (part of the
2053     standard perl distribution), which never really got finished. If you
2054     find it somewhere, I<don't use it>. These days, your best bet is to
2055     look at the L<Expect> module available from CPAN, which also requires two
2056     other modules from CPAN, L<IO::Pty> and L<IO::Stty>.
2057    
2058     =end original
2059    
2060     昔々、F<chat2.pl> と呼ばれたライブラリがありました(これは標準の perl
2061     配布キットに含まれます); 実際には完成していませんでした。
2062     もしこれをどこかで見つけても I<使ってはいけません>。
2063     今日では、CPAN にある L<IO::Pty> や L<IO::Stty> といった
2064     ライブラリを使う L<Expect> を探すのが最善でしょう。
2065    
2066     =head2 Is there a way to hide perl's command line from programs such as "ps"?
2067    
2068     (“ps”のようなプログラムから、perl のコマンドラインを隠す方法はありますか?)
2069    
2070     =begin original
2071    
2072     First of all note that if you're doing this for security reasons (to
2073     avoid people seeing passwords, for example) then you should rewrite
2074     your program so that critical information is never given as an
2075     argument. Hiding the arguments won't make your program completely
2076     secure.
2077    
2078     =end original
2079    
2080     まず初めに、あなたが(たとえば他人がパスワードを除くのを避けるためなどの)
2081     セキュリティ上の理由でそれを行おうとしてるのであれば、
2082     重要な情報が引数として与えられることがないようにプログラムを
2083     書き直すべきだということに注意してください。
2084     引数を隠すことは、あなたのプログラムを完全に安全なものにすることは
2085     ありません。
2086    
2087     =begin original
2088    
2089     To actually alter the visible command line, you can assign to the
2090     variable $0 as documented in L<perlvar>. This won't work on all
2091     operating systems, though. Daemon programs like sendmail place their
2092     state there, as in:
2093    
2094     =end original
2095    
2096     外部から見えるコマンドラインを実際に書き換えるために、L<perlvar> で
2097     説明されているように $0 という変数に代入することができます。
2098     ただし、これはすべてのオペレーティングシステムで実行できるというものでは
2099     ありません。
2100     sendmail のようなデーモンプログラムは以下の例のように状態を設定します:
2101    
2102     $0 = "orcus [accepting connections]";
2103    
2104     =head2 I {changed directory, modified my environment} in a perl script. How come the change disappeared when I exited the script? How do I get my changes to be visible?
2105    
2106     (perl スクリプトの中で、ディレクトリを変更したり環境変数を変更しました。なぜ、スクリプトを終了したときこれらの変更は無効になってしまうの? 変更が反映されるようにするには?)
2107    
2108     =over 4
2109    
2110     =item Unix
2111    
2112     =begin original
2113    
2114     In the strictest sense, it can't be done--the script executes as a
2115     different process from the shell it was started from. Changes to a
2116     process are not reflected in its parent--only in any children
2117     created after the change. There is shell magic that may allow you to
2118     fake it by C<eval()>ing the script's output in your shell; check out the
2119     comp.unix.questions FAQ for details.
2120    
2121     =end original
2122    
2123     もっとも厳密な意味で言うと、それはできません--スクリプトはそれを
2124     起動したシェルとは異なるプロセスで実行されるのです。
2125     あるプロセスに対する変更はその親に反映されることはありません
2126     --変更した後で生成された子プロセスに対してのみ反映されます。
2127     あなたの使っているシェルにおいてスクリプトの出力を C<eval()> することによって、
2128     お望みのことをしたように見せかけるシェルマジック (shell magic)があります;
2129     詳しくは comp.unix.questions FAQを調べてください。
2130    
2131     =back
2132    
2133     =head2 How do I close a process's filehandle without waiting for it to complete?
2134    
2135     (プロセスの完了を待つことなしにそのファイルハンドルをクローズするには?)
2136    
2137     =begin original
2138    
2139     Assuming your system supports such things, just send an appropriate signal
2140     to the process (see L<perlfunc/"kill">). It's common to first send a TERM
2141     signal, wait a little bit, and then send a KILL signal to finish it off.
2142    
2143     =end original
2144    
2145     あなたの使っているシステムがそういった機能をサポートしていると仮定すると、
2146     そのプロセスに対して適切なシグナルを送るだけです
2147     (L<perlfunc/"kill"> を参照してください)。
2148     最初にTERMシグナルを送り、ちょっとだけ待って、
2149     終了させるために KILL シグナルを送るというのが一般的なものです。
2150    
2151     =head2 How do I fork a daemon process?
2152    
2153     (デーモンプロセスを fork() するには?)
2154    
2155     =begin original
2156    
2157     If by daemon process you mean one that's detached (disassociated from
2158     its tty), then the following process is reported to work on most
2159     Unixish systems. Non-Unix users should check their Your_OS::Process
2160     module for other solutions.
2161    
2162     =end original
2163    
2164     あなたのいうデーモンプロセスが detach されている(tty と
2165     結び付けられていない)ものであれば、以下の手順がほとんどの UNIX 的な
2166     システムで動作するということが報告されています。
2167     非 UNIX ユーザーは Your_OS::Process モジュールで他の解決策を
2168     あたるべきでしょう。
2169    
2170     =over 4
2171    
2172     =item *
2173    
2174     =begin original
2175    
2176     Open /dev/tty and use the TIOCNOTTY ioctl on it. See L<tty(1)>
2177     for details. Or better yet, you can just use the C<POSIX::setsid()>
2178     function, so you don't have to worry about process groups.
2179    
2180     =end original
2181    
2182     /dev/tty をオープンし、それに TIOCNOTTY ioctl を使います。
2183     詳しくは L<tty(1)> を参照してください。
2184     そのほかもっと良いのは、C<POSIX::setsid()> 関数を使うことです; これによって
2185     プロセスグループに関して思い煩う必要がなくなります。
2186    
2187     =item *
2188    
2189     =begin original
2190    
2191     Change directory to /
2192    
2193     =end original
2194    
2195     / へディレクトリを変更します。
2196    
2197     =item *
2198    
2199     =begin original
2200    
2201     Reopen STDIN, STDOUT, and STDERR so they're not connected to the old
2202     tty.
2203    
2204     =end original
2205    
2206     STDIN、STDOUT、STDERR を再オープンします; これでこれらのハンドルは以前の
2207     tty とは結び付けらていない状態になります。
2208    
2209     =item *
2210    
2211     =begin original
2212    
2213     Background yourself like this:
2214    
2215     =end original
2216    
2217     以下のようにしてバックグラウンドにします:
2218    
2219     fork && exit;
2220    
2221     =back
2222    
2223     =begin original
2224    
2225     The L<Proc::Daemon> module, available from CPAN, provides a function to
2226     perform these actions for you.
2227    
2228     =end original
2229    
2230     CPAN で入手できる L<Proc::Daemon> モジュールはこれらの操作を
2231     行ってくれる関数を提供しています。
2232    
2233     =head2 How do I find out if I'm running interactively or not?
2234    
2235     (自分が対話的に実行されているかどうかを知るには?)
2236    
2237     =begin original
2238    
2239     (contributed by brian d foy)
2240    
2241     =end original
2242    
2243     (brian d foy によって寄贈されました)
2244    
2245     =begin original
2246    
2247     This is a difficult question to answer, and the best answer is
2248     only a guess.
2249    
2250     =end original
2251    
2252     これは答えるのが難しい質問で、最良の答えは単なる推測です。
2253    
2254     =begin original
2255    
2256     What do you really want to know? If you merely want to know if one of
2257     your filehandles is connected to a terminal, you can try the C<-t>
2258     file test:
2259    
2260     =end original
2261    
2262     本当に知りたいことは何でしょう?
2263     単にファイルハンドルの一つが端末と接続しているかどうかを知りたいなら、
2264     C<-t> ファイルテストを試すことができます:
2265    
2266     if( -t STDOUT ) {
2267     print "I'm connected to a terminal!\n";
2268     }
2269    
2270     =begin original
2271    
2272     However, you might be out of luck if you expect that means there is a
2273     real person on the other side. With the L<Expect> module, another
2274     program can pretend to be a person. The program might even come close
2275     to passing the Turing test.
2276    
2277     =end original
2278    
2279     しかし、その先に実際の人間がいることを想定するなら、うまく
2280     いかないかもしれません。
2281     L<Expect> では、他のプログラムは人間である振りをします。
2282     プログラムはチューリングテストに通過しそうになるかもしれません。
2283    
2284     =begin original
2285    
2286     The L<IO::Interactive> module does the best it can to give you an
2287     answer. Its C<is_interactive> function returns an output filehandle;
2288     that filehandle points to standard output if the module thinks the
2289     session is interactive. Otherwise, the filehandle is a null handle
2290     that simply discards the output:
2291    
2292     =end original
2293    
2294     L<IO::Interactive> モジュールが答えとして最良のものです。
2295     この C<is_interactive> 関数は出力ファイルハンドルを返します;
2296     このファイルハンドルは、モジュールがセッションが対話的であると考えた
2297     場合には、標準出力を示します。
2298     さもなければ、ファイルハンドルは、単に出力が捨てられる空のハンドルです:
2299    
2300     use IO::Interactive;
2301    
2302     print { is_interactive } "I might go to standard output!\n";
2303    
2304     =begin original
2305    
2306     This still doesn't guarantee that a real person is answering your
2307     prompts or reading your output.
2308    
2309     =end original
2310    
2311     これままだ実際の人間がプロンプトに答えたり出力を読んだりするのが
2312     実際の人間であることを保証しません。
2313    
2314     =begin original
2315    
2316     If you want to know how to handle automated testing for your
2317     distribution, you can check the environment. The CPAN
2318     Testers, for instance, set the value of C<AUTOMATED_TESTING>:
2319    
2320     =end original
2321    
2322     あなたの配布での自動化テストの扱う方法を知りたいなら、環境を
2323     チェックしてください。
2324     例えば、CPAN Testers は C<AUTOMATED_TESTING> の値を設定します:
2325    
2326     unless( $ENV{AUTOMATED_TESTING} ) {
2327     print "Hello interactive tester!\n";
2328     }
2329    
2330     =head2 How do I timeout a slow event?
2331    
2332     (遅いイベントをタイムアウトするには?)
2333    
2334     =begin original
2335    
2336     Use the C<alarm()> function, probably in conjunction with a signal
2337     handler, as documented in L<perlipc/"Signals"> and the section on
2338     "Signals" in the Camel. You may instead use the more flexible
2339     L<Sys::AlarmCall> module available from CPAN.
2340    
2341     =end original
2342    
2343     L<perlipc/"Signals"> やらくだ本の "Signal" の章で説明されているように、
2344     C<alarm()> 関数と、おそらくはシグナルハンドラーを組み合わせて使います。
2345     この代わりに、CPAN にあるより柔軟性のある
2346     L<Sys::AlarmCall> モジュールを使うこともできます。
2347    
2348     =begin original
2349    
2350     The C<alarm()> function is not implemented on all versions of Windows.
2351     Check the documentation for your specific version of Perl.
2352    
2353     =end original
2354    
2355     C<alarm()> 関数は Windows の全てのバージョンで実装されているわけではありません。
2356     あなたの特定のバージョンの Perl のドキュメントをチェックしてください。
2357    
2358     =head2 How do I set CPU limits?
2359     X<BSD::Resource> X<limit> X<CPU>
2360    
2361     (CPU のリミットを設定するには?)
2362    
2363     =begin original
2364    
2365     (contributed by Xho)
2366    
2367     =end original
2368    
2369     (Xho によって寄贈されました)
2370    
2371     =begin original
2372    
2373     Use the L<BSD::Resource> module from CPAN. As an example:
2374    
2375     =end original
2376    
2377     CPAN にある L<BSD::Resource> モジュールを使います。
2378     例として:
2379    
2380     use BSD::Resource;
2381     setrlimit(RLIMIT_CPU,10,20) or die $!;
2382    
2383     =begin original
2384    
2385     This sets the soft and hard limits to 10 and 20 seconds, respectively.
2386     After 10 seconds of time spent running on the CPU (not "wall" time),
2387     the process will be sent a signal (XCPU on some systems) which, if not
2388     trapped, will cause the process to terminate. If that signal is
2389     trapped, then after 10 more seconds (20 seconds in total) the process
2390     will be killed with a non-trappable signal.
2391    
2392     =end original
2393    
2394     これはソフト制限とハード制限をそれぞれ 10 秒と 20 秒にセットします。
2395     CPU が 10 秒の時間を消費後("wall" 時間ではありません)、プロセスはシグナル
2396     (システムによっては XCPU)を送り、トラップされなければ、これによりプロセスは
2397     終了します。
2398     シグナルがトラップされると、さらに 10 秒(合計 20 秒)経過後、プロセスは
2399     ブロック不可シグナルで kill されます。
2400    
2401     =begin original
2402    
2403     See the L<BSD::Resource> and your systems documentation for the gory
2404     details.
2405    
2406     =end original
2407    
2408     詳細については L<BSD::Resource> とあなたのシステムのドキュメントを
2409     参照してください。
2410    
2411     =head2 How do I avoid zombies on a Unix system?
2412    
2413     (UNIX システムでゾンビを回避するには?)
2414    
2415     =begin original
2416    
2417     Use the reaper code from L<perlipc/"Signals"> to call C<wait()> when a
2418     SIGCHLD is received, or else use the double-fork technique described
2419     in L<perlfaq8/"How do I start a process in the background?">.
2420    
2421     =end original
2422    
2423     SIGCHLD を受け取ったときに C<wait()> を呼び出すように L<perlipc/"Signals"> に
2424     ある刈り取り機プログラム (reaper code) を使うか、
2425     L<perlfaq8/"How do I start a process in the background?"> で
2426     説明されている double-fork テクニックを使います。
2427    
2428     =head2 How do I use an SQL database?
2429    
2430     (SQL データベースを使うには?)
2431    
2432     =begin original
2433    
2434     The L<DBI> module provides an abstract interface to most database
2435     servers and types, including Oracle, DB2, Sybase, mysql, Postgresql,
2436     ODBC, and flat files. The DBI module accesses each database type
2437     through a database driver, or DBD. You can see a complete list of
2438     available drivers on CPAN: L<http://www.cpan.org/modules/by-module/DBD/> .
2439     You can read more about DBI on L<http://dbi.perl.org/> .
2440    
2441     =end original
2442    
2443     L<DBI> モジュールはほとんどのデータベースサーバと型に対する抽象
2444     インターフェースを提供します; これには Oracle, DB2, Sybase, mysql,
2445     Postgresql, ODBC, フラットファイルを含みます。
2446     DBI モジュールは、DBD と呼ばれるデータベースドライバを通して各データベース
2447     型にアクセスします。
2448     利用可能なドライバの完全な一覧は CPAN
2449     (L<http://www.cpan.org/modules/by-module/DBD/>) にあります。
2450     DBI に関するさらなる情報は L<http://dbi.perl.org/> にあります。
2451    
2452     =begin original
2453    
2454     Other modules provide more specific access: L<Win32::ODBC>, L<Alzabo>,
2455     C<iodbc>, and others found on CPAN Search: L<http://search.cpan.org/> .
2456    
2457     =end original
2458    
2459     その他のモジュールはより具体的なアクセスを提供します: L<Win32::ODBC>,
2460     L<Alzabo>, C<iodbc> などは CPAN Search (L<http://search.cpan.org/>) で
2461     見つけられます。
2462    
2463     =head2 How do I make a system() exit on control-C?
2464    
2465     (コントロール-C で system() が exit するようにするには?)
2466    
2467     =begin original
2468    
2469     You can't. You need to imitate the C<system()> call (see L<perlipc> for
2470     sample code) and then have a signal handler for the INT signal that
2471     passes the signal on to the subprocess. Or you can check for it:
2472    
2473     =end original
2474    
2475     できません。
2476     C<system()> 呼び出しを模倣する必要があり(L<perlipc> のサンプルコードを
2477     参照してください)、サブプロセスでのシグナルを送る
2478     INT シグナルのためのシグナルハンドラーを持つ必要があります。
2479     あるいは、以下のようにしてチェックすることもできます:
2480    
2481     $rc = system($cmd);
2482     if ($rc & 127) { die "signal death" }
2483    
2484     =head2 How do I open a file without blocking?
2485    
2486     (ブロックせずにファイルをオープンするには?)
2487    
2488     =begin original
2489    
2490     If you're lucky enough to be using a system that supports
2491     non-blocking reads (most Unixish systems do), you need only to use the
2492     C<O_NDELAY> or C<O_NONBLOCK> flag from the C<Fcntl> module in conjunction with
2493     C<sysopen()>:
2494    
2495     =end original
2496    
2497     幸運にもあなたの使っているシステムがノンブロッキング読み出し
2498     (ほとんどの Unix 的システムはサポートしています)をサポートしているのであれば、
2499     C<Fcntl> モジュールの C<O_NDELAY> や C<O_NONBLOCK> というフラグを
2500     C<sysopen()> と一緒に使うだけです。
2501    
2502     use Fcntl;
2503     sysopen(my $fh, "/foo/somefile", O_WRONLY|O_NDELAY|O_CREAT, 0644)
2504     or die "can't open /foo/somefile: $!":
2505    
2506     =head2 How do I tell the difference between errors from the shell and perl?
2507    
2508     (シェルからと perl からのエラーを見分けるには?)
2509    
2510     =begin original
2511    
2512     (answer contributed by brian d foy)
2513    
2514     =end original
2515    
2516     (答えは brian d foy によって寄贈されました)
2517    
2518     =begin original
2519    
2520     When you run a Perl script, something else is running the script for you,
2521     and that something else may output error messages. The script might
2522     emit its own warnings and error messages. Most of the time you cannot
2523     tell who said what.
2524    
2525     =end original
2526    
2527     あなたが Perl スクリプトを実行すると、他の誰かがあなたのためにスクリプトを
2528     動かします; そしてその他の誰かがエラーメッセージを出すことがあります。
2529     スクリプトも自身の警告やエラーメッセージを出すかもしれません。
2530     ほとんどの場合、それを言っているのが誰かは教えてもらえません。
2531    
2532     =begin original
2533    
2534     You probably cannot fix the thing that runs perl, but you can change how
2535     perl outputs its warnings by defining a custom warning and die functions.
2536    
2537     =end original
2538    
2539     あなたが perl を実行しているものを修正することはおそらくできませんが、
2540     独自の警告と die の関数を定義することで、perl がどのように警告を
2541     出力するかを変えることはできます。
2542    
2543     =begin original
2544    
2545     Consider this script, which has an error you may not notice immediately.
2546    
2547     =end original
2548    
2549     すぐには気付かないかもしれない誤りを含むこのスクリプトを考えてみてください。
2550    
2551     #!/usr/locl/bin/perl
2552    
2553     print "Hello World\n";
2554    
2555     =begin original
2556    
2557     I get an error when I run this from my shell (which happens to be
2558     bash). That may look like perl forgot it has a C<print()> function,
2559     but my shebang line is not the path to perl, so the shell runs the
2560     script, and I get the error.
2561    
2562     =end original
2563    
2564     これを私のシェル(たまたま bash でした)で実行するとエラーが表示されます。
2565     これは perl が C<print()> 関数を忘れてしまったかのように見えますが、
2566     #! 行の perl へのパスが間違っているので、シェルがこのスクリプトを実行し、
2567     エラーが表示されます。
2568    
2569     $ ./test
2570     ./test: line 3: print: command not found
2571    
2572     =begin original
2573    
2574     A quick and dirty fix involves a little bit of code, but this may be all
2575     you need to figure out the problem.
2576    
2577     =end original
2578    
2579     素早く汚い修正には少しコードが必要ですが、おそらく問題を見つけ出すのに
2580     必要なものが全てあるでしょう。
2581    
2582     #!/usr/bin/perl -w
2583    
2584     BEGIN {
2585     $SIG{__WARN__} = sub{ print STDERR "Perl: ", @_; };
2586     $SIG{__DIE__} = sub{ print STDERR "Perl: ", @_; exit 1};
2587     }
2588    
2589     $a = 1 + undef;
2590     $x / 0;
2591     __END__
2592    
2593     =begin original
2594    
2595     The perl message comes out with "Perl" in front. The C<BEGIN> block
2596     works at compile time so all of the compilation errors and warnings
2597     get the "Perl:" prefix too.
2598    
2599     =end original
2600    
2601     perl のメッセージは先頭に "Perl" を付けて出力されます。
2602     C<BEGIN> ブロックはコンパイル時に動作するので、全てのコンパイル時のエラーと
2603     警告にも "Perl:" の接頭辞がつきます。
2604    
2605     Perl: Useless use of division (/) in void context at ./test line 9.
2606     Perl: Name "main::a" used only once: possible typo at ./test line 8.
2607     Perl: Name "main::x" used only once: possible typo at ./test line 9.
2608     Perl: Use of uninitialized value in addition (+) at ./test line 8.
2609     Perl: Use of uninitialized value in division (/) at ./test line 9.
2610     Perl: Illegal division by zero at ./test line 9.
2611     Perl: Illegal division by zero at -e line 3.
2612    
2613     =begin original
2614    
2615     If I don't see that "Perl:", it's not from perl.
2616    
2617     =end original
2618    
2619     "Perl:" という文字がなければ、perl が出しているものではありません。
2620    
2621     =begin original
2622    
2623     You could also just know all the perl errors, and although there are
2624     some people who may know all of them, you probably don't. However, they
2625     all should be in the L<perldiag> manpage. If you don't find the error in
2626     there, it probably isn't a perl error.
2627    
2628     =end original
2629    
2630     単に全ての perl のエラーを知るという方法もありますが、(全てのエラーを
2631     知っている人もいるかもしれませんが)おそらくあなたは知らないでしょう。
2632     しかし、これら全ては L<perldiag> マニュアルページにあるはずです。
2633     もしエラーがここになければ、それはおそらく perl のエラーではありません。
2634    
2635     =begin original
2636    
2637     Looking up every message is not the easiest way, so let perl to do it
2638     for you. Use the diagnostics pragma with turns perl's normal messages
2639     into longer discussions on the topic.
2640    
2641     =end original
2642    
2643     全てのメッセージを探すというのは最も簡単な方法ではないので、その作業は
2644     perl にさせます。
2645     perl の通常のメッセージを、より長い説明に変更する diagnostics プラグマを
2646     使います。
2647    
2648     use diagnostics;
2649    
2650     =begin original
2651    
2652     If you don't get a paragraph or two of expanded discussion, it
2653     might not be perl's message.
2654    
2655     =end original
2656    
2657     段落一つか二つの追加の議論が表示されなければ、それは perl のメッセージでは
2658     ないでしょう。
2659    
2660     =head2 How do I install a module from CPAN?
2661    
2662     (モジュールを CPAN からインストールするには?)
2663    
2664     =begin original
2665    
2666     (contributed by brian d foy)
2667    
2668     =end original
2669    
2670     (brian d foy によって寄贈されました)
2671    
2672     =begin original
2673    
2674     The easiest way is to have a module also named CPAN do it for you by using
2675     the C<cpan> command that comes with Perl. You can give it a list of modules
2676     to install:
2677    
2678     =end original
2679    
2680     最も単純な方法は、Perl と同梱されている C<cpan> コマンドを使って、この仕事を
2681     してくれる CPAN モジュールを入手することです。
2682     インストールするモジュールの一覧を与えます:
2683    
2684     $ cpan IO::Interactive Getopt::Whatever
2685    
2686     =begin original
2687    
2688     If you prefer C<CPANPLUS>, it's just as easy:
2689    
2690     =end original
2691    
2692     C<CPANPLUS> が好みなら、やはり簡単です:
2693    
2694     $ cpanp i IO::Interactive Getopt::Whatever
2695    
2696     If you want to install a distribution from the current directory, you can
2697     tell C<CPAN.pm> to install C<.> (the full stop):
2698    
2699     $ cpan .
2700    
2701     =begin original
2702    
2703     See the documentation for either of those commands to see what else
2704     you can do.
2705    
2706     =end original
2707    
2708     その他に出来ることについてはこれらのコマンドの文書を参照してください。
2709    
2710     =begin original
2711    
2712     If you want to try to install a distribution by yourself, resolving
2713     all dependencies on your own, you follow one of two possible build
2714     paths.
2715    
2716     =end original
2717    
2718     全ての依存を自分で解決して、配布を自分自身でインストールしてみたい場合は、
2719     二つのビルド方法のどちらかに従います。
2720    
2721     =begin original
2722    
2723     For distributions that use I<Makefile.PL>:
2724    
2725     =end original
2726    
2727     I<Makefile.PL> を使う配布では:
2728    
2729     $ perl Makefile.PL
2730     $ make test install
2731    
2732     =begin original
2733    
2734     For distributions that use I<Build.PL>:
2735    
2736     =end original
2737    
2738     I<Build.PL> を使う配布では:
2739    
2740     $ perl Build.PL
2741     $ ./Build test
2742     $ ./Build install
2743    
2744     =begin original
2745    
2746     Some distributions may need to link to libraries or other third-party
2747     code and their build and installation sequences may be more complicated.
2748     Check any I<README> or I<INSTALL> files that you may find.
2749    
2750     =end original
2751    
2752     一部の配布ではライブラリはその他のサードパーティのコードへのリンクが
2753     必要であったり、ビルドとインストールの手順がもっと複雑な場合もあります。
2754     見付かった I<README> や I<INSTALL> ファイルをチェックしてください。
2755    
2756     =head2 What's the difference between require and use?
2757    
2758     (require と use の間の違いとは?)
2759    
2760     =begin original
2761    
2762     (contributed by brian d foy)
2763    
2764     =end original
2765    
2766     (brian d foy によって寄贈されました)
2767    
2768     =begin original
2769    
2770     Perl runs C<require> statement at run-time. Once Perl loads, compiles,
2771     and runs the file, it doesn't do anything else. The C<use> statement
2772     is the same as a C<require> run at compile-time, but Perl also calls the
2773     C<import> method for the loaded package. These two are the same:
2774    
2775     =end original
2776    
2777     Perl は C<require> 文を実行時に実行します。
2778     一旦 Perl がロードされ、コンパイルされ、ファイルが実行されると、
2779     他に何もしません。
2780     C<use> 文は C<require> と同じことをコンパイル時に行いますが、
2781     Perl はまたロードされたパッケージの C<import> メソッドを呼び出します。
2782     以下の二つは同じです:
2783    
2784     use MODULE qw(import list);
2785    
2786     BEGIN {
2787     require MODULE;
2788     MODULE->import(import list);
2789     }
2790    
2791     =begin original
2792    
2793     However, you can suppress the C<import> by using an explicit, empty
2794     import list. Both of these still happen at compile-time:
2795    
2796     =end original
2797    
2798     しかし、明示的に空のインポートリストを使うことで、C<import> を
2799     抑制できます。
2800     これらはどちらもやはりコンパイル時に起こります:
2801    
2802     use MODULE ();
2803    
2804     BEGIN {
2805     require MODULE;
2806     }
2807    
2808     =begin original
2809    
2810     Since C<use> will also call the C<import> method, the actual value
2811     for C<MODULE> must be a bareword. That is, C<use> cannot load files
2812     by name, although C<require> can:
2813    
2814     =end original
2815    
2816     C<use> は C<import> メソッドの呼び出しも行うので、
2817     C<MODULE> の実際の値は裸の単語でなければなりません。
2818     これは、C<use> は名前でファイルをロード出来ませんが、
2819     C<require> ではできます:
2820    
2821     require "$ENV{HOME}/lib/Foo.pm"; # no @INC searching!
2822    
2823     =begin original
2824    
2825     See the entry for C<use> in L<perlfunc> for more details.
2826    
2827     =end original
2828    
2829     さらなる詳細については L<perlfunc> の C<use> の項目を参照してください。
2830    
2831     =head2 How do I keep my own module/library directory?
2832    
2833     (自分自身のモジュール/ライブラリディレクトリを持つには?)
2834    
2835     =begin original
2836    
2837     When you build modules, tell Perl where to install the modules.
2838    
2839     =end original
2840    
2841     モジュールを作成するときに、Perl にモジュールをインストールする場所を
2842     指定します。
2843    
2844     =begin original
2845    
2846     If you want to install modules for your own use, the easiest way might
2847     be L<local::lib>, which you can download from CPAN. It sets various
2848     installation settings for you, and uses those same settings within
2849     your programs.
2850    
2851     =end original
2852    
2853     自分自身が使うためにモジュールをインストールしたいなら、一番簡単な方法は、
2854     CPAN からダウンロードできる L<local::lib> でしょう。
2855     これは様々なインストール設定を行い、プログラム中で同じ設定を使います。
2856    
2857     =begin original
2858    
2859     If you want more flexibility, you need to configure your CPAN client
2860     for your particular situation.
2861    
2862     =end original
2863    
2864     もっと柔軟性がほしいなら、CPAN クライアントを特定の状況に合わせて
2865     設定する必要があります。
2866    
2867     =begin original
2868    
2869     For C<Makefile.PL>-based distributions, use the INSTALL_BASE option
2870     when generating Makefiles:
2871    
2872     =end original
2873    
2874     C<Makefile.PL>-ベースの配布では、Makefile の生成時に INSTALL_BASE
2875     オプションを使ってください:
2876    
2877     perl Makefile.PL INSTALL_BASE=/mydir/perl
2878    
2879     =begin original
2880    
2881     You can set this in your C<CPAN.pm> configuration so modules
2882     automatically install in your private library directory when you use
2883     the CPAN.pm shell:
2884    
2885     =end original
2886    
2887     CPAN.pm シェルを使ったときに、自動的にモジュールを自分のプライベートな
2888     ディレクトリにインストールさせるように、CPAN.pm の設定を変更できます:
2889    
2890     % cpan
2891     cpan> o conf makepl_arg INSTALL_BASE=/mydir/perl
2892     cpan> o conf commit
2893    
2894     =begin original
2895    
2896     For C<Build.PL>-based distributions, use the --install_base option:
2897    
2898     =end original
2899    
2900     C<Build.PL>-ベースの配布では、--install_base オプションを使ってください:
2901    
2902     perl Build.PL --install_base /mydir/perl
2903    
2904     =begin original
2905    
2906     You can configure C<CPAN.pm> to automatically use this option too:
2907    
2908     =end original
2909    
2910     自動的にこのオプションを使うために、CPAN.pm を設定することも出来ます:
2911    
2912     % cpan
2913     cpan> o conf mbuild_arg "--install_base /mydir/perl"
2914     cpan> o conf commit
2915    
2916     =begin original
2917    
2918     INSTALL_BASE tells these tools to put your modules into
2919     F</mydir/perl/lib/perl5>. See L<How do I add a directory to my
2920     include path (@INC) at runtime?> for details on how to run your newly
2921     installed modules.
2922    
2923     =end original
2924    
2925     INSTALL_BASE はこれらのツールにモジュールを F</mydir/perl/lib/perl5> に
2926     置くように伝えます。
2927     新しくインストールしたモジュールを実行する方法についての詳細は
2928     L<How do I add a directory to my include path (@INC) at runtime?> を
2929     参照してください。
2930    
2931     =begin original
2932    
2933     There is one caveat with INSTALL_BASE, though, since it acts
2934     differently from the PREFIX and LIB settings that older versions of
2935     L<ExtUtils::MakeMaker> advocated. INSTALL_BASE does not support
2936     installing modules for multiple versions of Perl or different
2937     architectures under the same directory. You should consider whether you
2938     really want that and, if you do, use the older PREFIX and LIB
2939     settings. See the L<ExtUtils::Makemaker> documentation for more details.
2940    
2941     =end original
2942    
2943     しかし、INSTALL_BASE には一つの問題点があります;
2944     なぜなら、より古いバージョンの L<ExtUtils::MakeMaker> が推奨していた
2945     PREFIX および LIB とは異なった動作をするからです。
2946     INSTALL_BASE は、複数のバージョンの Perl や異なったアーキテクチャに
2947     対して同じディレクトリにモジュールをインストールすることには
2948     対応していません。
2949     もし本当にそれが必要でそうするなら、古い PREFIX と LIB の設定を
2950     考慮するべきです。
2951     さらなる詳細については L<ExtUtils::Makemaker> の文書を参照してください。
2952    
2953     =head2 How do I add the directory my program lives in to the module/library search path?
2954    
2955     (私のプログラムの置いてある場所をモジュール/ライブラリの検索パスに追加するには?)
2956    
2957     =begin original
2958    
2959     (contributed by brian d foy)
2960    
2961     =end original
2962    
2963     (brian d foy によって寄贈されました)
2964    
2965     =begin original
2966    
2967     If you know the directory already, you can add it to C<@INC> as you would
2968     for any other directory. You might <use lib> if you know the directory
2969     at compile time:
2970    
2971     =end original
2972    
2973     すでにディレクトリが分かっている場合は、それを C<@INC> に追加できます。
2974     コンパイル時に分かっている場合は、<use lib> が使えます:
2975    
2976     use lib $directory;
2977    
2978     =begin original
2979    
2980     The trick in this task is to find the directory. Before your script does
2981     anything else (such as a C<chdir>), you can get the current working
2982     directory with the C<Cwd> module, which comes with Perl:
2983    
2984     =end original
2985    
2986     このタスクの秘訣は、ディレクトリを探すことです。
2987     あなたのスクリプトが(C<chdir> などで)他の場所へ行く前に、Perl に
2988     同梱されている C<Cwd> モジュールを使って、カレントワーキングディレクトリを
2989     取得できます:
2990    
2991     BEGIN {
2992     use Cwd;
2993     our $directory = cwd;
2994     }
2995    
2996     use lib $directory;
2997    
2998     =begin original
2999    
3000     You can do a similar thing with the value of C<$0>, which holds the
3001     script name. That might hold a relative path, but C<rel2abs> can turn
3002     it into an absolute path. Once you have the
3003    
3004     =end original
3005    
3006     似たようなことは、スクリプト名を記録している C<$0> でもできます。
3007     これは相対パスかもしれませんが、C<rel2abs> はこれを絶対パスに変更できます。
3008     以下のようにすると
3009    
3010     BEGIN {
3011     use File::Spec::Functions qw(rel2abs);
3012     use File::Basename qw(dirname);
3013    
3014     my $path = rel2abs( $0 );
3015     our $directory = dirname( $path );
3016     }
3017    
3018     use lib $directory;
3019    
3020     =begin original
3021    
3022     The L<FindBin> module, which comes with Perl, might work. It finds the
3023     directory of the currently running script and puts it in C<$Bin>, which
3024     you can then use to construct the right library path:
3025    
3026     =end original
3027    
3028     Perl に同梱されている L<FindBin> モジュールが働くでしょう。
3029     これは現在実行しているスクリプトのディレクトリを見つけて C<$Bin> に
3030     設定し、正しいライブラリパスを構築するために使えるようにします:
3031    
3032     use FindBin qw($Bin);
3033    
3034     =begin original
3035    
3036     You can also use L<local::lib> to do much of the same thing. Install
3037     modules using L<local::lib>'s settings then use the module in your
3038     program:
3039    
3040     =end original
3041    
3042     同じことをするのに L<local::lib> も使えます。
3043     L<local::lib> の設定を使ってモジュールをインストールしてから、プログラムで
3044     そのモジュールを使います:
3045    
3046     use local::lib; # sets up a local lib at ~/perl5
3047    
3048     =begin original
3049    
3050     See the L<local::lib> documentation for more details.
3051    
3052     =end original
3053    
3054     さらなる詳細については L<local::lib> の文書を参照してください。
3055    
3056     =head2 How do I add a directory to my include path (@INC) at runtime?
3057    
3058     (実行時にインクルードパス (@INC) にディレクトリを追加するには?)
3059    
3060     =begin original
3061    
3062     Here are the suggested ways of modifying your include path, including
3063     environment variables, run-time switches, and in-code statements:
3064    
3065     =end original
3066    
3067     環境変数、実行時スイッチ、コード内の文などを使って、インクルードパスを
3068     変更するためのお薦めの方法を挙げておきます:
3069    
3070     =over 4
3071    
3072     =item the C<PERLLIB> environment variable
3073    
3074     (C<PERLLIB> 環境変数)
3075    
3076     $ export PERLLIB=/path/to/my/dir
3077     $ perl program.pl
3078    
3079     =item the C<PERL5LIB> environment variable
3080    
3081     (C<PERL5LIB> 環境変数)
3082    
3083     $ export PERL5LIB=/path/to/my/dir
3084     $ perl program.pl
3085    
3086     =item the C<perl -Idir> command line flag
3087    
3088     (C<perl -Idir> コマンドラインフラグ)
3089    
3090     $ perl -I/path/to/my/dir program.pl
3091    
3092     =item the C<lib> pragma:
3093    
3094     (C<lib> プラグマ)
3095    
3096     use lib "$ENV{HOME}/myown_perllib";
3097    
3098     =item the L<local::lib> module:
3099    
3100     use local::lib;
3101    
3102     use local::lib "~/myown_perllib";
3103    
3104     =back
3105    
3106     =begin original
3107    
3108     The last is particularly useful because it knows about machine-dependent
3109     architectures. The C<lib.pm> pragmatic module was first
3110     included with the 5.002 release of Perl.
3111    
3112     =end original
3113    
3114     最後のものが特に便利です; なぜなら、これはマシン依存のアーキテクチャを
3115     知っているからです。
3116     プラグマ的モジュール C<lib.pm> は Perl 5.002 で最初に導入されました。
3117    
3118     =head2 What is socket.ph and where do I get it?
3119    
3120     (socket.ph とは一体何で、それはどこで入手できますか?)
3121    
3122     =begin original
3123    
3124     It's a Perl 4 style file defining values for system networking
3125     constants. Sometimes it is built using L<h2ph> when Perl is installed,
3126     but other times it is not. Modern programs should use C<use Socket;>
3127     instead.
3128    
3129     =end original
3130    
3131     それは Perl 4 スタイルのファイルで、ネットワーク使用のための
3132     値を定義しているものです。
3133     これは Perl がインストールされたときに L<h2ph> を使って作成されることも
3134     ありますが、そうでないときもあります。
3135     最近のプログラムでは代わりに C<use Socket> を使うべきです。
3136    
3137     =head1 AUTHOR AND COPYRIGHT
3138    
3139     Copyright (c) 1997-2010 Tom Christiansen, Nathan Torkington, and
3140     other authors as noted. All rights reserved.
3141    
3142     This documentation is free; you can redistribute it and/or modify it
3143     under the same terms as Perl itself.
3144    
3145     Irrespective of its distribution, all code examples in this file
3146     are hereby placed into the public domain. You are permitted and
3147     encouraged to use this code in your own programs for fun
3148     or for profit as you see fit. A simple comment in the code giving
3149     credit would be courteous but is not required.
3150    
3151     =begin meta
3152    
3153     Translate: 吉村 寿人 <JAE00534@niftyserve.or.jp>
3154     Update: SHIRAKATA Kentaro <argrath@ub32.org> (5.6.1-5.14.1, 5.00150039)
3155     Status: completed
3156    
3157     =end meta
3158    

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26