perlopentut > 5.40.0 との差分

perlopentut 5.40.0 と 5.10.0 の差分

11
2=encoding utf8
2=encoding euc-jp
33
44=head1 NAME
55
66=begin original
77
8perlopentut - simple recipes for opening files and pipes in Perl
8perlopentut - tutorial on opening things in Perl
99
1010=end original
1111
12perlopentut - Perl でファイルを開りパイプを使ったりするための簡単なレシピ
12perlopentut - Perl でいろんなものを開ためのチュートリアル
1313
1414=head1 DESCRIPTION
1515
1616=begin original
1717
18Whenever you do I/O on a file in Perl, you do so through what in Perl is
18Perl has two simple, built-in ways to open files: the shell way for
19called a B<filehandle>. A filehandle is an internal name for an external
19convenience, and the C way for precision. The shell way also has 2- and
20file. It is the job of the C<open> function to make the association
203-argument forms, which have different semantics for handling the filename.
21between the internal name and the external name, and it is the job
21The choice is yours.
22of the C<close> function to break that association.
2322
2423=end original
2524
26Perl でファイル対して入出力をするとき、Perl で B<ファイルハンドル>
25Perl にはファイルを開くための 2 つの単純な組み込みの手段があります:
27呼ばれるもを通して行います。
26利便性ためのシェル風の方法と、正確性のための C 風の方法です。
28ファイハンドル外部ファイルに対する内部です。
27シェ風の方法に 2 引数と 3 引数があり、ファイル名の扱いに関して
29C<open> 関数の仕事は内部名と外部名関連づけることで、C<close> 関数は
28異なった動作します。
30関連づけを壊すことです。
29選択はあなた次第です。
3130
31=head1 Open E<agrave> la shell
32
33(シェル風に開く)
34
3235=begin original
3336
34For your convenience, Perl sets up a few special filehandles that are
37Perl's C<open> function was designed to mimic the way command-line
35already open when you run. These include C<STDIN>, C<STDOUT>, C<STDERR>,
38redirection in the shell works. Here are some basic examples
36and C<ARGV>. Since those are pre-opened, you can use them right away
39from the shell:
37without having to go to the trouble of opening them yourself:
3840
3941=end original
4042
41便利なように、Perl は実行開始時に既に開いているいくつか特別な
43Perl の C<open> 関数、シェルでコマンドラインのリダイレクトをまねて
42ファイルハンドルを定します。
44計されています。
43それ C<STDIN>, C<STDOUT>, C<STDERR>, C<ARGV> です
45以下シェルの基本的な例で:
44これらは既に開いているので、自分でこれらを開くときの問題を受けることなく
45正しく使うことができます。
4646
47 print STDERR "This is a debugging message.\n";
47 $ myprogram file1 file2 file3
48 $ myprogram < inputfile
49 $ myprogram > outputfile
50 $ myprogram >> outputfile
51 $ myprogram | otherprogram
52 $ otherprogram | myprogram
4853
49 print STDOUT "Please enter something: ";
54=begin original
50 $response = <STDIN> // die "how come no input?";
51 print STDOUT "Thank you!\n";
5255
53 while (<ARGV>) { ... }
56And here are some more advanced examples:
5457
58=end original
59
60そして以下はもう少し高度な例です:
61
62 $ otherprogram | myprogram f1 - f2
63 $ otherprogram 2>&1 | myprogram -
64 $ myprogram <&3
65 $ myprogram >&4
66
5567=begin original
5668
57As you see from those examples, C<STDOUT> and C<STDERR> are output
69Programmers accustomed to constructs like those above can take comfort
58handles, and C<STDIN> and C<ARGV> are input handles. They are
70in learning that Perl directly supports these familiar constructs using
59in all capital letters because they are reserved to Perl, much
71virtually the same syntax as the shell.
60like the C<@ARGV> array and the C<%ENV> hash are. Their external
61associations were set up by your shell.
6272
6373=end original
6474
65これら例で見られるように、C<STDOUT> C<STDERR> 出力ハンドルで
75上述のような方法慣れているプログラマにっては、Perl がシェルと事実上
66C<STDIN> C<ARGV> 入力ハンドルです。
76同じ文法を使った親しんでいる構造に直接対応していることは
67これらは C<@ARGV> 配列や C<%ENV> ハッシュと同様 Perl によって
77学ぶのが容易なります。
68予約されているので、全て大文字になっています。
69これらの外部関連づけはシェルによって行われます。
7078
79=head2 Simple Opens
80
81(単純に開く)
82
7183=begin original
7284
73You will need to open every other filehandle on your own. Although there
85The C<open> function takes two arguments: the first is a filehandle,
74are many variants, the most common way to call Perl's open() function
86and the second is a single string comprising both what to open and how
75is with three arguments and one return value:
87to open it. C<open> returns true when it works, and when it fails,
88returns a false value and sets the special variable C<$!> to reflect
89the system error. If the filehandle was previously opened, it will
90be implicitly closed first.
7691
7792=end original
7893
79他のファイルハンドルは自分開く必要があります。
94C<open> 関数は 2 つ引数を取ります: 1 つめはファイルハンドルで
80多くのバリエーションはありますが、Perl の open() 関数を開く最も般的な方法は
952 つめは何を開くかとどう開くかで構成される単の文字列です。
813 引数一つのり値のもので:
96C<open> は成功する真をし、失敗ると偽を返して特殊変数 C<$!> に
97システムエラーを反映します。
98指定されたファイルハンドルが以前に開かれていた場合は、暗黙の内に
99まず閉じられます。
82100
83101=begin original
84102
85C< I<OK> = open(I<HANDLE>, I<MODE>, I<PATHNAME>)>
103For example:
86104
87105=end original
88106
89C< I<OK> = open(I<HANDLE>, I<MODE>, I<PATHNAME>)>
107例えば:
90108
109 open(INFO, "datafile") || die("can't open datafile: $!");
110 open(INFO, "< datafile") || die("can't open datafile: $!");
111 open(RESULTS,"> runstats") || die("can't open runstats: $!");
112 open(LOG, ">> logfile ") || die("can't open logfile: $!");
113
91114=begin original
92115
93Where:
116If you prefer the low-punctuation version, you could write that this way:
94117
95118=end original
96119
97ここで:
120句読点が少ない方が好みなら、以下のようにも書けます:
98121
99=over
122 open INFO, "< datafile" or die "can't open datafile: $!";
123 open RESULTS,"> runstats" or die "can't open runstats: $!";
124 open LOG, ">> logfile " or die "can't open logfile: $!";
100125
101=item I<OK>
126=begin original
102127
128A few things to notice. First, the leading less-than is optional.
129If omitted, Perl assumes that you want to open the file for reading.
130
131=end original
132
133いくつか気がつくことがあります。
134まず、先頭の「大なり」は省略可能です。
135省略されると、Perl はファイルを読み込みのために開きたいと仮定します。
136
103137=begin original
104138
105will be some defined value if the open succeeds, but
139Note also that the first example uses the C<||> logical operator, and the
106C<undef> if it fails;
140second uses C<or>, which has lower precedence. Using C<||> in the latter
141examples would effectively mean
107142
108143=end original
109144
110これは、開くに成功すれば何らかの定義された値、失敗すれば C<undef> です;
145最初例は C<||> 論理演算子を使っていて、二つめの例はより優先順位の低い
146C<or> を使っていることにも注意してください。
147後者の例で C<||> を使うと、実際には以下のような意味になり
111148
112=item I<HANDLE>
149 open INFO, ( "< datafile" || die "can't open datafile: $!" );
113150
114151=begin original
115152
116should be an undefined scalar variable to be filled in by the
153which is definitely not what you want.
117C<open> function if it succeeds;
118154
119155=end original
120156
121これは、成功すれば C<open> 関数によって埋められ未定義スカラ変数で;
157あなたが望んでいるのと全く違うことになりま
122158
123=item I<MODE>
159=begin original
124160
161The other important thing to notice is that, just as in the shell,
162any whitespace before or after the filename is ignored. This is good,
163because you wouldn't want these to do different things:
164
165=end original
166
167他の注意するべき重要なこととしては、シェルと同様、ファイル名の前後の
168空白は無視されることです。
169これはよいことです; なぜなら、以下のものが違うことをすることは
170望まないだろうからです:
171
172 open INFO, "<datafile"
173 open INFO, "< datafile"
174 open INFO, "< datafile"
175
125176=begin original
126177
127is the access mode and the encoding format to open the file with;
178Ignoring surrounding whitespace also helps for when you read a filename
179in from a different file, and forget to trim it before opening:
128180
129181=end original
130182
131はファイルを開くときアクセスモードとエンコーディング型式す;
183周りの空白を無視するファイルファイルから読み込ん
184開く前に空白を取り除くのを忘れたときにも助けになります:
132185
133=item I<PATHNAME>
186 $filename = <INFO>; # oops, \n still there
187 open(EXTRA, "< $filename") || die "can't open $filename: $!";
134188
135189=begin original
136190
137is the external name of the file you want opened.
191This is not a bug, but a feature. Because C<open> mimics the shell in
192its style of using redirection arrows to specify how to open the file, it
193also does so with respect to extra whitespace around the filename itself
194as well. For accessing files with naughty names, see
195L<"Dispelling the Dweomer">.
138196
139197=end original
140198
141これは開きたいファイルの外部名です。
199これはバグではありません、仕様です。
200C<open> はどのようにファイルを開くかを指定するのにリダイレクトの矢印を
201使うことでシェルを真似ているので、ファイル名の周りの空白についても
202同じように扱います。
203行儀の悪い名前のファイルにアクセスするためには、
204L<"Dispelling the Dweomer"> を参照してください。
142205
143=back
206=begin original
144207
208There is also a 3-argument version of C<open>, which lets you put the
209special redirection characters into their own argument:
210
211=end original
212
213また、3 引数版の C<open> もあって、これは特殊なリダイレクト文字を
214独立した引数にしたものです:
215
216 open( INFO, ">", $datafile ) || die "Can't create $datafile: $!";
217
145218=begin original
146219
147Most of the complexity of the C<open> function lies in the many
220In this case, the filename to open is the actual string in C<$datafile>,
148possible values that the I<MODE> parameter can take on.
221so you don't have to worry about C<$datafile> containing characters
222that might influence the open mode, or whitespace at the beginning of
223the filename that would be absorbed in the 2-argument version. Also,
224any reduction of unnecessary string interpolation is a good thing.
149225
150226=end original
151227
152C<open> 関数複雑さ大部分は、I<MODE> 引数が多く値を
228この場合、開くファイル名は C<$datafile> の実際文字列なで、
153取ることのできることあります。
229C<$datafile> 開くモードに影響を与える文字や、
2302 引数版では吸収されるファイル名の先頭の空白が含まれているかどうかを
231心配する必要はありません。
232また、不必要な文字列変換が削減されるのもよいことです。
154233
234=head2 Indirect Filehandles
235
236(間接ファイルハンドル)
237
155238=begin original
156239
157One last thing before we show you how to open files: opening
240C<open>'s first argument can be a reference to a filehandle. As of
158files does not (usually) automatically lock them in Perl. See
241perl 5.6.0, if the argument is uninitialized, Perl will automatically
159L<perlfaq5> for how to lock.
242create a filehandle and put a reference to it in the first argument,
243like so:
160244
161245=end original
162246
163ファイルの開き方を説明する前に最後に一言: Perl はファイルを開いて
247C<open> の最初の引数ファイルハンドルへのリファレンスにすること出来ます。
164(普通)自動的にロックすることはしません。
248perl 5.6.0 以降、引数が初期化されていない場合、Perl
165ロック方法ついては L<perlfaq5> 参照してください。
249以下よう、自動的にファイルハンドル作成して、それへのリファレンスを
250最初の引数に設定します:
166251
167=head1 Opening Text Files
252 open( my $in, $infile ) or die "Couldn't read $infile: $!";
253 while ( <$in> ) {
254 # do something with $_
255 }
256 close $in;
168257
169(テキストファイルを開く)
258=begin original
170259
171=head2 Opening Text Files for Reading
260Indirect filehandles make namespace management easier. Since filehandles
261are global to the current package, two subroutines trying to open
262C<INFILE> will clash. With two functions opening indirect filehandles
263like C<my $infile>, there's no clash and no need to worry about future
264conflicts.
172265
173(読み込み用にテキストファイルを開く)
266=end original
174267
268間接ファイルハンドルは、名前空間管理をより容易にします。
269ファイルハンドルは現在のパッケージに対してグローバルなので、
270二つのサブルーチンが C<INFILE> を開こうとすると衝突します。
271二つの関数が C<my $infil> のように間接ファイルハンドルで開いていると、
272衝突は発生せず、将来の衝突を気にする必要もありません。
273
175274=begin original
176275
177If you want to read from a text file, first open it in
276Another convenient behavior is that an indirect filehandle automatically
178read-only mode like this:
277closes when it goes out of scope or when you undefine it:
179278
180279=end original
181280
182テキストファイルを読み込みたい場合まず次のように読み込み専用モドで
281もう一つの便利は振る舞いとして、間接ファイルハンドルはスコプ外に出るか
183開きます:
282undef にされると、自動的に閉じます:
184283
185 my $filename = "/some/path/to/a/textfile/goes/here";
284 sub firstline {
186 my $encoding = ":encoding(UTF-8)";
285 open( my $in, shift ) && return scalar <$in>;
187 my $handle = undef; # this will be filled in on success
286 # no close() required
287 }
188288
189 open($handle, "< $encoding", $filename)
289=head2 Pipe Opens
190 || die "$0: can't open $filename for reading: $!";
191290
291(パイプを開く)
292
192293=begin original
193294
194As with the shell, in Perl the C<< "<" >> is used to open the file in
295In C, when you want to open a file using the standard I/O library,
195read-only mode. If it succeeds, Perl allocates a brand new filehandle for
296you use the C<fopen> function, but when opening a pipe, you use the
196you and fills in your previously undefined C<$handle> argument with a
297C<popen> function. But in the shell, you just use a different redirection
197reference to that handle.
298character. That's also the case for Perl. The C<open> call
299remains the same--just its argument differs.
198300
199301=end original
200302
201シェルと同様に、Perlファイルを読み込み専用モードでめに
303Cは、標準 I/O ライブラリを使ってファイルを開いときは C<fopen> を
202C<< "<" >> 使われます。
304使いますが、パイプを開くときには C<popen> 関数を使ます。
203これに成功するとPerl 新しいファルハンドル割り当て、未定義だった
305しかしシェルで、単に違うリダレクト文字使います。
204C<$handle> 引数にそハンドルへのリファレンスを設定します。
306これは Perl場合にも当てはまります。
307C<open> 呼び出しは同じままです -- 単にその引数が変わります。
205308
206309=begin original
207310
208Now you may use functions like C<readline>, C<read>, C<getc>, and
311If the leading character is a pipe symbol, C<open> starts up a new
209C<sysread> on that handle. Probably the most common input function
312command and opens a write-only filehandle leading into that command.
210is the one that looks like an operator:
313This lets you write into that handle and have what you write show up on
314that command's standard input. For example:
211315
212316=end original
213317
214これでこハンドルに対して C<readline>, C<read>, C<getc>,
318先頭文字がパイプ記号の場合、C<open> は新しいコマンドを準備して、
215C<sysread> ような関数が使えます。
319コマンドへと導かれる書き込み専用のファイルハンドルを開きます。
216おそらく最も一般的入力関数は演算子よう見えるものでしょう:
320これによって、あたがこハンドル書き込んだものがコマンドの
321標準入力に渡されるようになります。
322例えば:
217323
218 $line = readline($handle);
324 open(PRINTER, "| lpr -Plp1") || die "can't run lpr: $!";
219 $line = <$handle>; # same thing
325 print PRINTER "stuff\n";
326 close(PRINTER) || die "can't close lpr: $!";
220327
221328=begin original
222329
223Because the C<readline> function returns C<undef> at end of file or
330If the trailing character is a pipe, you start up a new command and open a
224upon error, you will sometimes see it used this way:
331read-only filehandle leading out of that command. This lets whatever that
332command writes to its standard output show up on your handle for reading.
333For example:
225334
226335=end original
227336
228C<readline> 関数はファル終端やエラーときに C<undef> 返すので
337末尾の文字がパ場合、新しいコマンド準備して
229時々次ように使わているのを見るでしょう:
338コマンドから導かれる読み込み専用ファイルハンドル開きます。
339これにより、そのコマンドが標準出力にしたものはなんでも読み込み用の
340ファイルハンドルに現れます。
341例えば:
230342
231 $line = <$handle>;
343 open(NET, "netstat -i -n |") || die "can't fork netstat: $!";
232 if (defined $line) {
344 while (<NET>) { } # do something with input
233 # do something with $line
345 close(NET) || die "can't close netstat: $!";
234 }
235 else {
236 # $line is not valid, so skip it
237 }
238346
239347=begin original
240348
241You can also just quickly C<die> on an undefined value this way:
349What happens if you try to open a pipe to or from a non-existent
350command? If possible, Perl will detect the failure and set C<$!> as
351usual. But if the command contains special shell characters, such as
352C<E<gt>> or C<*>, called 'metacharacters', Perl does not execute the
353command directly. Instead, Perl runs the shell, which then tries to
354run the command. This means that it's the shell that gets the error
355indication. In such a case, the C<open> call will only indicate
356failure if Perl can't even run the shell. See L<perlfaq8/"How can I
357capture STDERR from an external command?"> to see how to cope with
358this. There's also an explanation in L<perlipc>.
242359
243360=end original
244361
245また、次のようにて単未定義値に対してすばやく C<die> すきます:
362存在ないコマンドに対してパイプを開こうとすると何が起こるしょうか?
363可能なら、Perl は失敗を検出していつも通り C<$!> をセットします。
364しかし、もしコマンドに「メタ文字」と呼ばれる C<E<gt>> や C<*> のような
365特殊シェル文字が含まれていると、Perl はコマンドを直接実行しません。
366その代わりに、Perl はシェルを実行し、それからコマンドを
367実行しようとします。
368これは、エラーを受け取るのはシェルであることを意味します。
369このような場合、C<open> 呼び出しは、たとえ Perl がシェルを実行できなかった
370場合でも、失敗を示すだけです。
371これを扱う方法については、
372L<perlfaq8/"How can I capture STDERR from an external command?"> を
373参照してください。
374L<perlipc> にも説明があります。
246375
247 $line = <$handle> // die "no input found";
376=begin original
248377
378If you would like to open a bidirectional pipe, the IPC::Open2
379library will handle this for you. Check out
380L<perlipc/"Bidirectional Communication with Another Process">
381
382=end original
383
384双方向パイプを開きたい場合は、IPC::Open2 ライブラリが使えます。
385L<perlipc/"Bidirectional Communication with Another Process"> を
386参照してください。
387
388=head2 The Minus File
389
390("-" ファイル)
391
249392=begin original
250393
251However, if hitting EOF is an expected and normal event, you do not want to
394Again following the lead of the standard shell utilities, Perl's
252exit simply because you have run out of input. Instead, you probably just want
395C<open> function treats a file whose name is a single minus, "-", in a
253to exit an input loop. You can then test to see if an actual error has caused
396special way. If you open minus for reading, it really means to access
254the loop to terminate, and act accordingly:
397the standard input. If you open minus for writing, it really means to
398access the standard output.
255399
256400=end original
257401
258しかし、EOF に到達するが想定されていて通常の出来事の場
402再び標準シェル機能にわせるようにPerl の
259入力なくなっただけで終了したくありせん
403C<open> 関数は、名前マイナス一つ "-" だけのファイルを特別に扱い
260そうではなく、に入力ループを終了たいでしょう
404読み込み用にマイナスを開実際は標準入力にアクセスます
261実際のエラーがループを終了させたのかをテて、適切に行動できます:
405書き込み用にマイナスを開くと、実際には標準出力にアクセスします
262406
263 while (<$handle>) {
407=begin original
264 # do something with data in $_
265 }
266 if ($!) {
267 die "unexpected error while reading from $filename: $!";
268 }
269408
409If minus can be used as the default input or default output, what happens
410if you open a pipe into or out of minus? What's the default command it
411would run? The same script as you're currently running! This is actually
412a stealth C<fork> hidden inside an C<open> call. See
413L<perlipc/"Safe Pipe Opens"> for details.
414
415=end original
416
417マイナスがデフォルトの入力やデフォルトの出力として使えるとすると、
418パイプに対してマイナスを使うとどうなるでしょう?
419デフォルトのコマンドとして何が実行されるのでしょう?
420今実行している同じスクリプトです!
421これは実際には C<open> 呼び出し内で隠れた C<fork> が行われます。
422詳しくは L<perlipc/"Safe Pipe Opens"> を参照してください。
423
424=head2 Mixing Reads and Writes
425
426(読み書きを混ぜる)
427
270428=begin original
271429
272B<A Note on Encodings>: Having to specify the text encoding every time
430It is possible to specify both read and write access. All you do is
273might seem a bit of a bother. To set up a default encoding for C<open> so
431add a "+" symbol in front of the redirection. But as in the shell,
274that you don't have to supply it each time, you can use the C<open> pragma:
432using a less-than on a file never creates a new file; it only opens an
433existing one. On the other hand, using a greater-than always clobbers
434(truncates to zero length) an existing file, or creates a brand-new one
435if there isn't an old one. Adding a "+" for read-write doesn't affect
436whether it only works on existing files or always clobbers existing ones.
275437
276438=end original
277439
278B<エンコーディングに関する注意>: テキトエンコーディング毎回指定する
440読み書きアクセ双方を指定することは可能です。
279必要があるの少し面倒感じかもしれません
441必要なことリダイレクトの前 "+" の文字を加えだけです
280毎回設定する必要がないように C<open> ためのデトエンコーディング
442しかしシェル場合と同様、ァイに小なり記号使っても新しいファイルが
281設定すために、C<open> プラグマ使えま:
443作成されことはありません; すでにあるファイル開くだけで
444一方、大なり記号を使うと、ファイルがある場合には常に上書き
445(長さ 0 に切り詰め)られ、ファイルがない場合は新しいファイルが作成されます。
446読み書き用に "+" を追加しても、既にあるファイルにだけ動作するか
447既にあるファイルを上書きするかということには影響を与えません。
282448
283 use open qw< :encoding(UTF-8) >;
449 open(WTMP, "+< /usr/adm/wtmp")
450 || die "can't open /usr/adm/wtmp: $!";
284451
452 open(SCREEN, "+> lkscreen")
453 || die "can't open lkscreen: $!";
454
455 open(LOGFILE, "+>> /var/log/applog")
456 || die "can't open /var/log/applog: $!";
457
285458=begin original
286459
287Once you've done that, you can safely omit the encoding part of the
460The first one won't create a new file, and the second one will always
288open mode:
461clobber an old one. The third one will create a new file if necessary
462and not clobber an old one, and it will allow you to read at any point
463in the file, but all writes will always go to the end. In short,
464the first case is substantially more common than the second and third
465cases, which are almost always wrong. (If you know C, the plus in
466Perl's C<open> is historically derived from the one in C's fopen(3S),
467which it ultimately calls.)
289468
290469=end original
291470
292度これ行えばopen モードからエンコーディング部分を安全省略できます:
471つ目のものは新しいファイル作ることはなく二つ目ものは常古い
472ファイルを上書きします。
473三つ目のものは必要があれば新しいファイルを作りますが、古いファイルを
474上書きせず、ファイルのどの地点でも読み込むことができますが、
475書き込みは常に末尾に行われます。
476要するに、一つ目のものは(ほとんど常に間違っている)二つ目や三つ目の
477ものよりもかなり一般的です。
478(もし C を知っているなら、Perl の C<open> で使われるプラス記号が
479歴史的には (最終的に呼ばれることになる) C の fopen(3S) に由来しています。)
293480
294 open($handle, "<", $filename)
481=begin original
295 || die "$0: can't open $filename for reading: $!";
296482
483In fact, when it comes to updating a file, unless you're working on
484a binary file as in the WTMP case above, you probably don't want to
485use this approach for updating. Instead, Perl's B<-i> flag comes to
486the rescue. The following command takes all the C, C++, or yacc source
487or header files and changes all their foo's to bar's, leaving
488the old version in the original filename with a ".orig" tacked
489on the end:
490
491=end original
492
493実際、ファイルを更新するとき、上述の WTMP の場合のようなバイナリファイルに
494対して作業をするのでない限り、おそらく更新のためにこの手法を
495使いたくないでしょう。
496代わりに、Perl の B<-i> フラグが助けになります。
497以下のコマンドは C, C++, yacc 全てののソースファイルとヘッダファイルを
498取って、その中の全ての foo を bar に変更し、原版は元のファイル名の末尾に
499".orig" を付けたファイルに保持します:
500
501 $ perl -i.orig -pe 's/\bfoo\b/bar/g' *.[Cchy]
502
297503=begin original
298504
299But never use the bare C<< "<" >> without having set up a default encoding
505This is a short cut for some renaming games that are really
300first. Otherwise, Perl cannot know which of the many, many, many possible
506the best way to update textfiles. See the second question in
301flavors of text file you have, and Perl will have no idea how to correctly
507L<perlfaq5> for more details.
302map the data in your file into actual characters it can work with. Other
303common encoding formats including C<"ASCII">, C<"ISO-8859-1">,
304C<"ISO-8859-15">, C<"Windows-1252">, C<"MacRoman">, and even C<"UTF-16LE">.
305See L<perlunitut> for more about encodings.
306508
307509=end original
308510
309しかし、先トのエンコーディング設定することなく裸
511これは実際はテキストァイルを更新するため最良の方法であるリネーム
310C<< "<" >> を使うことは決してしないください
512手法へのショートカット
311ければ、Perl はともとてもとてもたくさんあるテキストファイルの
513る詳細については L<perlfaq5> の 2 番目の質問を参照してくい。
312種類のうちどれかを知ることができず、Perl はあなたのファイルのデータを
313動作させるための実際の文字にマッピングすることができません。
314その他のよくあるエンコーディング形式には
315C<"ASCII">, C<"ISO-8859-1">,
316C<"ISO-8859-15">, C<"Windows-1252">, C<"MacRoman"> および、
317C<"UTF-16LE"> すらもあります。
318エンコーディングに関するさらなる情報については L<perlunitut> を
319参照してください。
320514
321=head2 Opening Text Files for Writing
515=head2 Filters
322516
323(書き込み用にテキストァイを開く)
517(フ)
324518
325519=begin original
326520
327When you want to write to a file, you first have to decide what to do about
521One of the most common uses for C<open> is one you never
328any existing contents of that file. You have two basic choices here: to
522even notice. When you process the ARGV filehandle using
329preserve or to clobber.
523C<< <ARGV> >>, Perl actually does an implicit open
524on each file in @ARGV. Thus a program called like this:
330525
331526=end original
332527
333ファイルに書き込みた場合、そファイルの既存の内容をどうす
528C<open> のもっとも一般的な使一つは、使っていこと
334まず決定る必要があります。
529気づきらしないものです。
335二つの基本的な選択肢があります: 保存するか上書するかです。
530ARGV ファイルハンドルを C<< <ARGV> >> を使って処理する、Perl は
531実際は @ARGV の各ファイルを暗黙の内に開いています。
532従って、以下のようなプログラムは:
336533
534 $ myprogram file1 file2 file3
535
337536=begin original
338537
339If you want to preserve any existing contents, then you want to open the file
538can have all its files opened and processed one at a time
340in append mode. As in the shell, in Perl you use C<<< ">>" >>> to open an
539using a construct no more complex than:
341existing file in append mode. C<<< ">>" >>> creates the file if it does not
342already exist.
343540
344541=end original
345542
346既存内容保存したい場合、ファイルを追記モードで開きます。
543以下ようなものより複雑な構文使わなくてもそれぞれのファイルを
347シェルと同様に、 Perl でも既存のファイルを追記モードでくため
544いて一度処理できます:
348C<<< ">>" >>> が使われます。
349ファイルがない場合、C<<< ">>" >>> はファイルを作ります。
350545
351 my $handle = undef;
546 while (<>) {
352 my $filename = "/some/path/to/a/textfile/goes/here";
547 # do something with $_
353 my $encoding = ":encoding(UTF-8)";
548 }
354549
355 open($handle, ">> $encoding", $filename)
550=begin original
356 || die "$0: can't open $filename for appending: $!";
357551
552If @ARGV is empty when the loop first begins, Perl pretends you've opened
553up minus, that is, the standard input. In fact, $ARGV, the currently
554open file during C<< <ARGV> >> processing, is even set to "-"
555in these circumstances.
556
557=end original
558
559ループが最初に開始したときに @ARGV が空なら、Perl はマイナス記号
560(つまり標準入力) を開いたかのように振る舞います。
561実際、C<< <ARGV> >> で現在開いているファイルを示す $ARGV には、
562この慣習によって "-" がセットされます。
563
358564=begin original
359565
360Now you can write to that filehandle using any of C<print>, C<printf>,
566You are welcome to pre-process your @ARGV before starting the loop to
361C<say>, C<write>, or C<syswrite>.
567make sure it's to your liking. One reason to do this might be to remove
568command options beginning with a minus. While you can always roll the
569simple ones by hand, the Getopts modules are good for this:
362570
363571=end original
364572
365これでこハンドルに対して C<print>, C<printf>,
573好み形にするために、ープの開始前@ARGV を前処理しても問題ありません。
366C<say>, C<write>, C<syswrite> を使って書き込めます。
574こうするたの理由の一つは、マイナスから始るコマンドオプションを
575削除するためです。
576いつでも自分で単純なものを作ることができる一方、
577Getopts モジュールはこれを行うのによいものです:
367578
579 use Getopt::Std;
580
581 # -v, -D, -o ARG, sets $opt_v, $opt_D, $opt_o
582 getopts("vDo:");
583
584 # -v, -D, -o ARG, sets $args{v}, $args{D}, $args{o}
585 getopts("vDo:", \%args);
586
368587=begin original
369588
370As noted above, if the file does not already exist, then the append-mode open
589Or the standard Getopt::Long module to permit named arguments:
371will create it for you. But if the file does already exist, its contents are
372safe from harm because you will be adding your new text past the end of the
373old text.
374590
375591=end original
376592
377述したように、ファイルが既に存在していない場合、追記モードで開くと
593あるいは、名付きの引数を使えるようにするための
378ファイを作ります
594標準の Getopt::Long モジューもあります:
379しかしファイルが既に存在している場合、その内容は保護されます; 新しいテキストは
380既存のテキストの末尾に追加されるからです。
381595
596 use Getopt::Long;
597 GetOptions( "verbose" => \$verbose, # --verbose
598 "Debug" => \$debug, # --Debug
599 "output=s" => \$output );
600 # --output=somestring or --output somestring
601
382602=begin original
383603
384On the other hand, sometimes you want to clobber whatever might already be
604Another reason for preprocessing arguments is to make an empty
385there. To empty out a file before you start writing to it, you can open it
605argument list default to all files:
386in write-only mode:
387606
388607=end original
389608
390、時々、既に何かがあっても上書きしたいときもあります。
609引数を前処理するためのもうつの理由は空引数リストの
391書き込みを始める前にファイルを消ために、書き込み専用モード
610ォルトで全てのファイルる場合す:
392開くことができます:
393611
394 my $handle = undef;
612 @ARGV = glob("*") unless @ARGV;
395 my $filename = "/some/path/to/a/textfile/goes/here";
396 my $encoding = ":encoding(UTF-8)";
397613
398 open($handle, "> $encoding", $filename)
614=begin original
399 || die "$0: can't open $filename in write-open mode: $!";
400615
616You could even filter out all but plain, text files. This is a bit
617silent, of course, and you might prefer to mention them on the way.
618
619=end original
620
621プレーンなテキストファイル以外をフィルタリングすることもできます。
622これはもちろん少し静かなので、途中でそれに言及したいかもしれません。
623
624 @ARGV = grep { -f && -T } @ARGV;
625
401626=begin original
402627
403Here again Perl works just like the shell in that the C<< ">" >> clobbers
628If you're using the B<-n> or B<-p> command-line options, you
404an existing file.
629should put changes to @ARGV in a C<BEGIN{}> block.
405630
406631=end original
407632
408ここで再び Perl はシェルと同様に動作、C<< ">" >> は既存ファ
633B<-n> や B<-p> のコマンドランオプション使っているなら、
409上書します。
634@ARGV への変更は C<BEGIN{}> ブロックで行うべす。
410635
411636=begin original
412637
413As with the append mode, when you open a file in write-only mode,
638Remember that a normal C<open> has special properties, in that it might
414you can now write to that filehandle using any of C<print>, C<printf>,
639call fopen(3S) or it might called popen(3S), depending on what its
415C<say>, C<write>, or C<syswrite>.
640argument looks like; that's why it's sometimes called "magic open".
641Here's an example:
416642
417643=end original
418644
419追記モードと同様に、ファイル書き込みモードで開くと
645通常の C<open> は特別な特性持っていて、引数が何に見えるかによって
420C<print>, C<printf>, C<say>, C<write>, C<syswrite> 使って
646fopen(3S) を呼ぶかもしれませんし、popen(3S)呼ぶかもしれません;
421ファイハンドル書き込めようになります。
647これが時々「マジカルに開く」と呼ばれ理由です。
648以下は例です:
422649
650 $pwdinfo = `domainname` =~ /^(\(none\))?$/
651 ? '< /etc/passwd'
652 : 'ypcat passwd |';
653
654 open(PWD, $pwdinfo)
655 or die "can't open $pwdinfo: $!";
656
423657=begin original
424658
425What about read-write mode? You should probably pretend it doesn't exist,
659This sort of thing also comes into play in filter processing. Because
426because opening text files in read-write mode is unlikely to do what you
660C<< <ARGV> >> processing employs the normal, shell-style Perl C<open>,
427would like. See L<perlfaq5> for details.
661it respects all the special things we've already seen:
428662
429663=end original
430664
431読み書きモードについて?
665このようなことフィルタ処理でも起こります。
432おそらくそれ存在しないというふりした方がよいでしょう;
666C<< <ARGV> >> 処理通常のシェル風の Perl C<open> るの
433なぜならテキストファイルを読み書きモード開い
667今まに見きた全ての特別なことが反映されます:
434おそらくあなたが望んでいることをしないからです。
435詳しくは L<perlfaq5> を参照してください。
436668
437=head1 Opening Binary Files
669 $ myprogram f1 "cmd1|" - f2 "cmd2|" f3 < tmpfile
438670
439(バイナリファイルを開く)
671=begin original
440672
673That program will read from the file F<f1>, the process F<cmd1>, standard
674input (F<tmpfile> in this case), the F<f2> file, the F<cmd2> command,
675and finally the F<f3> file.
676
677=end original
678
679このプログラムはファイル F<f1>、プロセス F<cmd1>、標準入力
680(この場合は F<tmpfile>)、ファイル F<f2>、コマンド F<cmd2>、
681ファイル F<f3> から読み込みます。
682
441683=begin original
442684
443If the file to be opened contains binary data instead of text characters,
685Yes, this also means that if you have files named "-" (and so on) in
444then the C<MODE> argument to C<open> is a little different. Instead of
686your directory, they won't be processed as literal files by C<open>.
445specifying the encoding, you tell Perl that your data are in raw bytes.
687You'll need to pass them as "./-", much as you would for the I<rm> program,
688or you could use C<sysopen> as described below.
446689
447690=end original
448691
449開こうとしているファイルがテキスト文字ではなくバイナリデータが含まれてい
692、これは、"-" (あいは同じような) 名前を持つファイルが場合、
450場合、C<open> の C<MODE> 引数は少し異なものにます。
693C<open> によってそまま処理すことができいことも意味します。
451エンコーディンを指定する代わり、データが生バイト列ことを
694I<rm> プロラム対して行うと同様に "./-" という形渡すか、後述す
452Perl に知らせます。
695C<sysopen> を使う必要があります。
453696
454 my $filename = "/some/path/to/a/binary/file/goes/here";
697=begin original
455 my $encoding = ":raw :bytes"
456 my $handle = undef; # this will be filled in on success
457698
699One of the more interesting applications is to change files of a certain
700name into pipes. For example, to autoprocess gzipped or compressed
701files by decompressing them with I<gzip>:
702
703=end original
704
705もっと興味深いアプリケーションの一つは、ある名前を持ったファイルを
706パイプに変更するものです。
707例えば、gzip や compress されたファイルを、I<gzip> を使って自動的に
708展開するには:
709
710 @ARGV = map { /^\.(gz|Z)$/ ? "gzip -dc $_ |" : $_ } @ARGV;
711
458712=begin original
459713
460And then open as before, choosing C<<< "<" >>>, C<<< ">>" >>>, or
714Or, if you have the I<GET> program installed from LWP,
461C<<< ">" >>> as needed:
715you can fetch URLs before processing them:
462716
463717=end original
464718
465それから前述の通り必要に応じて
719あるいは、LWP からインストールされる I<GET> プログラムがあるなら
466C<<< "<" >>>, C<<< ">>" >>>, C<<< ">" >>> 選びます:
720処理する前に URLフェッチできます:
467721
468 open($handle, "< $encoding", $filename)
722 @ARGV = map { m#^\w+://# ? "GET $_ |" : $_ } @ARGV;
469 || die "$0: can't open $filename for reading: $!";
470723
471 open($handle, ">> $encoding", $filename)
724=begin original
472 || die "$0: can't open $filename for appending: $!";
473725
474 open($handle, "> $encoding", $filename)
726It's not for nothing that this is called magic C<< <ARGV> >>.
475 || die "$0: can't open $filename in write-open mode: $!";
727Pretty nifty, eh?
476728
729=end original
730
731これがマジカルな C<< <ARGV> >> と呼ばれるのは理由のないことではありません。
732かなりしゃれてるでしょ?
733
734=head1 Open E<agrave> la C
735
736(C 風に開く)
737
477738=begin original
478739
479Alternately, you can change to binary mode on an existing handle this way:
740If you want the convenience of the shell, then Perl's C<open> is
741definitely the way to go. On the other hand, if you want finer precision
742than C's simplistic fopen(3S) provides you should look to Perl's
743C<sysopen>, which is a direct hook into the open(2) system call.
744That does mean it's a bit more involved, but that's the price of
745precision.
480746
481747=end original
482748
483あるいは、次ようにし既に存在しているハンドルをバイナリモード
749シェル便利さを求めているなら、Perl の C<open> はまさぴったりです。
484変えること出来ます:
750一方、C の単純な fopen(3S) 提供しているものより高い精度を求めているなら、
751open(2) システムコールへの直接的なフックである、Perl の
752C<sysopen> を見るべきです。
753これはもう少し深く関わることを意味しますが、これは精度のコストです。
485754
486 binmode($handle) || die "cannot binmode handle";
755=begin original
487756
757C<sysopen> takes 3 (or 4) arguments.
758
759=end original
760
761C<sysopen> は 3 (または 4) 引数を取ります。
762
763 sysopen HANDLE, PATH, FLAGS, [MASK]
764
488765=begin original
489766
490This is especially handy for the handles that Perl has already opened for you.
767The HANDLE argument is a filehandle just as with C<open>. The PATH is
768a literal path, one that doesn't pay attention to any greater-thans or
769less-thans or pipes or minuses, nor ignore whitespace. If it's there,
770it's part of the path. The FLAGS argument contains one or more values
771derived from the Fcntl module that have been or'd together using the
772bitwise "|" operator. The final argument, the MASK, is optional; if
773present, it is combined with the user's current umask for the creation
774mode of the file. You should usually omit this.
491775
492776=end original
493777
494これ、Perl が既に開いているハンドルに対して特に有用です。
778HANDLE 引数 C<open> と同様のファイルハンドルです。
779PATH はリテラルなパスで、大なりや小なりやパイプやマイナスや空白の
780無視といったことに一切注意を払いません。
781もしこれらの文字があれば、それはパスの一部です。
782FLAGS 引数は、ビット単位 "|" 演算子で結合できる、Fcntl モジュールに
783由来する一つ以上の値を指定します。
784最後の引数である MASK はオプションです; もしあれば、これは
785ファイルの作成モードのためのユーザーの現在の umask と組み合わされます。
786普通はこれは省略するべきです。
495787
496 binmode(STDIN) || die "cannot binmode STDIN";
788=begin original
497 binmode(STDOUT) || die "cannot binmode STDOUT";
498789
790Although the traditional values of read-only, write-only, and read-write
791are 0, 1, and 2 respectively, this is known not to hold true on some
792systems. Instead, it's best to load in the appropriate constants first
793from the Fcntl module, which supplies the following standard flags:
794
795=end original
796
797読み込み専用、書き込み専用、読み書きを示す伝統的な値は
798それぞれ 0, 1, 2 ですが、これが正しくないシステムもあることが
799知られています。
800代わりに、以下の標準フラグを提供している Fcntl モジュールから
801最初に適切な定数を読み込むのが最善です:
802
803 O_RDONLY Read only
804 O_WRONLY Write only
805 O_RDWR Read and write
806 O_CREAT Create the file if it doesn't exist
807 O_EXCL Fail if the file already exists
808 O_APPEND Append to the file
809 O_TRUNC Truncate the file
810 O_NONBLOCK Non-blocking access
811
499812=begin original
500813
501You can also pass C<binmode> an explicit encoding to change it on the fly.
814Less common flags that are sometimes available on some operating
502This isn't exactly "binary" mode, but we still use C<binmode> to do it:
815systems include C<O_BINARY>, C<O_TEXT>, C<O_SHLOCK>, C<O_EXLOCK>,
816C<O_DEFER>, C<O_SYNC>, C<O_ASYNC>, C<O_DSYNC>, C<O_RSYNC>,
817C<O_NOCTTY>, C<O_NDELAY> and C<O_LARGEFILE>. Consult your open(2)
818manpage or its local equivalent for details. (Note: starting from
819Perl release 5.6 the C<O_LARGEFILE> flag, if available, is automatically
820added to the sysopen() flags because large files are the default.)
503821
504822=end original
505823
506また、その場で変更するために C<binmode> に明示的にエンコィング
824オペレィングシステムによっては、
507渡すこともできます。
825 C<O_BINARY>, C<O_TEXT>, C<O_SHLOCK>, C<O_EXLOCK>,
508これは正確には「バイナリ」モードではありませんが、それでも
826C<O_DEFER>, C<O_SYNC>, C<O_ASYNC>, C<O_DSYNC>, C<O_RSYNC>,
509これをするために C<binmode> を使ます:
827C<O_NOCTTY>, C<O_NDELAY>, C<O_LARGEFILE> のような、それほど有名ではな
828フラグも利用可能です。
829詳しくは open(2) man ページその等価物を参照してください。
830(注意: Perl リリース 5.6 から、もし利用可能なら、sysopen() のフラグに
831自動的に C<O_LARGEFILE> フラグが付きます; 大きなファイルがデフォルトに
832なったからです。)
510833
511 binmode(STDIN, ":encoding(MacRoman)") || die "cannot binmode STDIN";
834=begin original
512 binmode(STDOUT, ":encoding(UTF-8)") || die "cannot binmode STDOUT";
513835
836Here's how to use C<sysopen> to emulate the simple C<open> calls we had
837before. We'll omit the C<|| die $!> checks for clarity, but make sure
838you always check the return values in real code. These aren't quite
839the same, since C<open> will trim leading and trailing whitespace,
840but you'll get the idea.
841
842=end original
843
844これは、前述した単純な C<open> をエミュレートするために C<sysopen> を
845使う方法です。
846明確化のために C<|| die $!> のチェックは省略しましたが、実際のコードでは
847常に返り値をチェックするようにしてください。
848C<open> は前後の空白を削除するのでこれは全く同じというわけではありませんが、
849想像はできるでしょう。
850
514851=begin original
515852
516Once you have your binary file properly opened in the right mode, you can
853To open a file for reading:
517use all the same Perl I/O functions as you used on text files. However,
518you may wish to use the fixed-size C<read> instead of the variable-sized
519C<readline> for your input.
520854
521855=end original
522856
523一旦バイナリファイルを正しいモードで適切に開くと、テキストファイルで
857ファイルを読み込み用に開くには:
524使ったものと全て同じ Perl I/O 関数を使えます。
525しかし、入力に対して可変長の C<readline> ではなく固定長の
526C<read> を使った方が良いでしょう。
527858
859 open(FH, "< $path");
860 sysopen(FH, $path, O_RDONLY);
861
528862=begin original
529863
530Here's an example of how to copy a binary file:
864To open a file for writing, creating a new file if needed or else truncating
865an old file:
531866
532867=end original
533868
534次のものはバナリファイルをコピーする例す:
869ファルを書き込み用に開いて、必要なら新しいファイルを作り、そうなければ
870古いファイルを切り詰めるには:
535871
536 my $BUFSIZ = 64 * (2 ** 10);
872 open(FH, "> $path");
537 my $name_in = "/some/input/file";
873 sysopen(FH, $path, O_WRONLY | O_TRUNC | O_CREAT);
538 my $name_out = "/some/output/flie";
539874
540 my($in_fh, $out_fh, $buffer);
875=begin original
541876
542 open($in_fh, "<", $name_in)
877To open a file for appending, creating one if necessary:
543 || die "$0: cannot open $name_in for reading: $!";
544 open($out_fh, ">", $name_out)
545 || die "$0: cannot open $name_out for writing: $!";
546878
547 for my $fh ($in_fh, $out_fh) {
879=end original
548 binmode($fh) || die "binmode failed";
549 }
550880
551 while (read($in_fh, $buffer, $BUFSIZ)) {
881ファイルを追加用に開いて、もし必要なら新しいファイルを作るには:
552 unless (print $out_fh $buffer) {
553 die "couldn't write to $name_out: $!";
554 }
555 }
556882
557 close($in_fh) || die "couldn't close $name_in: $!";
883 open(FH, ">> $path");
558 close($out_fh) || die "couldn't close $name_out: $!";
884 sysopen(FH, $path, O_WRONLY | O_APPEND | O_CREAT);
559885
560=head1 Opening Pipes
886=begin original
561887
562(パイプを開く)
888To open a file for update, where the file must already exist:
563889
890=end original
891
892既に存在しているファイルを更新用に開くには:
893
894 open(FH, "+< $path");
895 sysopen(FH, $path, O_RDWR);
896
564897=begin original
565898
566Perl also lets you open a filehandle into an external program or shell
899And here are things you can do with C<sysopen> that you cannot do with
567command rather than into a file. You can do this in order to pass data
900a regular C<open>. As you'll see, it's just a matter of controlling the
568from your Perl program to an external command for further processing, or
901flags in the third argument.
569to receive data from another program for your own Perl program to
570process.
571902
572903=end original
573904
574Perl はまた、ファイルではなく外部プログラムやシェルコマンドへの
905そしてここでは普通の C<open> では出来いことを C<sysopen> でしています。
575ファイルハンドルも開す。
906見てたように、これは単に 3 番目の引数のフラグの制御の問題です。
576これを、更なる処理のために Perl プログラムから外部コマンドへ渡すため、
577または処理する Perl プログラムのために他のプログラムからデータを
578受け取るために行えます。
579907
580908=begin original
581909
582Filehandles into commands are also known as I<pipes>, since they work on
910To open a file for writing, creating a new file which must not previously
583similar inter-process communication principles as Unix pipelines. Such a
911exist:
584filehandle has an active program instead of a static file on its
585external end, but in every other sense it works just like a more typical
586file-based filehandle, with all the techniques discussed earlier in this
587article just as applicable.
588912
589913=end original
590914
591コマンドへのファイルハンドルは、I<パイプ> としても知られます;
915既に存在していたりはしない新しいファイルを作成して、ファイルを書き込み用に
592Unix パイプラインという似たようなプロセス間通信原則基づいて
916開くは:
593動作するからです。
594そのようなファイルハンドルは、外側が静的なファイルではなく
595動作中のプログラムですが、それ以外の点については
596より典型的なファイルベースのファイルハンドルとちょうど同じように
597動作し、この文書で既に議論した全てのテクニックが利用可能です。
598917
918 sysopen(FH, $path, O_WRONLY | O_EXCL | O_CREAT);
919
599920=begin original
600921
601As such, you open a pipe using the same C<open> call that you use for
922To open a file for appending, where that file must already exist:
602opening files, setting the second (C<MODE>) argument to special
603characters that indicate either an input or an output pipe. Use C<"-|"> for a
604filehandle that will let your Perl program read data from an external
605program, and C<"|-"> for a filehandle that will send data to that
606program instead.
607923
608924=end original
609925
6102 番目の (C<MODE>) 引数プの入力または出力示す特殊な文字を
926存在している必要があるファ追加用に開くには:
611設定することで、ファイルを開くのに使うのと同じ C<open> で
612パイプを開きます。
613Perl プログラムが外部プログラムからデータを読み込むファイルハンドルには
614C<"-|"> を使います; プログラムにデータを送るファイルハンドルには
615C<"|-"> を使います。
616927
617=head2 Opening a pipe for reading
928 sysopen(FH, $path, O_WRONLY | O_APPEND);
618929
619(読み込み用にパイプを開く)
930=begin original
620931
932To open a file for update, creating a new file if necessary:
933
934=end original
935
936必要なら新しいファイルを作成して、ファイルを更新用に開くには:
937
938 sysopen(FH, $path, O_RDWR | O_CREAT);
939
621940=begin original
622941
623Let's say you'd like your Perl program to process data stored in a nearby
942To open a file for update, where that file must not already exist:
624directory called C<unsorted>, which contains a number of textfiles.
625You'd also like your program to sort all the contents from these files
626into a single, alphabetically sorted list of unique lines before it
627starts processing them.
628943
629944=end original
630945
631たくさんのテキストファイルが含まれている、C<unsorted> と呼ばれる
632近くのディレクトリに保管されているデータを処理する
633Perl プログラムが欲しいとしましょう。
634また、処理を開始する前に、複数のファイルを単一の、ユニークな行を
635アルファベット順にソートしたいとします。
636946
947予め存在していてはならないファイルを交信用に開くには:
948
949 sysopen(FH, $path, O_RDWR | O_EXCL | O_CREAT);
950
637951=begin original
638952
639You could do this through opening an ordinary filehandle into each of
953To open a file without blocking, creating one if necessary:
640those files, gradually building up an in-memory array of all the file
641contents you load this way, and finally sorting and filtering that array
642when you've run out of files to load. I<Or>, you could offload all that
643merging and sorting into your operating system's own C<sort> command by
644opening a pipe directly into its output, and get to work that much
645faster.
646954
647955=end original
648956
649それぞれのファイルに対して通常のファイルハンドルを開き、
957必要ならファイルを作成してファイルをブロックせずにくには:
650このようにして読み込んだ全てのファイルの内容を徐々にメモリ内の配列に
651構築し、読み込むファイルがなくなったら最後にソートとフィルタリングをする、
652という形でこれを行うことも出来ます。
653I<あるいは>、結合とソートをオペレーティング自身の C<sort> コマンドに
654任せて、その出力を直接パイプで開くことで、遙かに速く作業することも出来ます。
655958
959 sysopen(FH, $path, O_WRONLY | O_NONBLOCK | O_CREAT);
960
961=head2 Permissions E<agrave> la mode
962
963(権限モード)
964
656965=begin original
657966
658Here's how that might look:
967If you omit the MASK argument to C<sysopen>, Perl uses the octal value
9680666. The normal MASK to use for executables and directories should
969be 0777, and for anything else, 0666.
659970
660971=end original
661972
662以下は、これがどように見えかで:
973C<sysopen> MASK 引数を省略すと、Perl は 8 進数の 0666 を使いま
974実行ファイルとディレクトリに対する通常の MASK は 0777で、それ以外の
975ファイルでは 0666 です。
663976
664 open(my $sort_fh, '-|', 'sort -u unsorted/*.txt')
977=begin original
665 or die "Couldn't open a pipe into sort: $!";
666978
667 # And right away, we can start reading sorted lines:
979Why so permissive? Well, it isn't really. The MASK will be modified
668 while (my $line = <$sort_fh>) {
980by your process's current C<umask>. A umask is a number representing
669 #
981I<disabled> permissions bits; that is, bits that will not be turned on
670 # ... Do something interesting with each $line here ...
982in the created files' permissions field.
671 #
672 }
673983
984=end original
985
986なぜそんなに権限を与えるのでしょう?
987えっと、実際にはそうではありません。
988MASK はプロセスの現在の C<umask> で修正されます。
989umask は I<無効にする> 許可ビットを表現する数値です; つまり、
990作成したファイルの許可フィールドを有効にすることはないということです。
991
674992=begin original
675993
676The second argument to C<open>, C<"-|">, makes it a read-pipe into a
994For example, if your C<umask> were 027, then the 020 part would
677separate program, rather than an ordinary filehandle into a file.
995disable the group from writing, and the 007 part would disable others
996from reading, writing, or executing. Under these conditions, passing
997C<sysopen> 0666 would create a file with mode 0640, since C<0666 & ~027>
998is 0640.
678999
6791000=end original
6801001
681C<open> 2 番目引数である C<"-|"> 、ファイへの通常の
1002例えば、C<umask> 027場合、020 の部分ープによる書き込みと
682ファイルハンドルではなく別個プログラムへの読み込みパイプにします。
1003実行を無効にし007 部分は他ユーザーによる読み込み、書き込み、
1004実行を無効にします。
1005この条件では、C<sysopen> に 0666 を渡すとモード 0640 でファイルを作ります;
1006C<0666 & ~027> は 0640 だからです。
6831007
6841008=begin original
6851009
686Note that the third argument to C<open> is a string containing the
1010You should seldom use the MASK argument to C<sysopen()>. That takes
687program name (C<sort>) plus all its arguments: in this case, C<-u> to
1011away the user's freedom to choose what permission new files will have.
688specify unqiue sort, and then a fileglob specifying the files to sort.
1012Denying choice is almost always a bad thing. One exception would be for
689The resulting filehandle C<$sort_fh> works just like a read-only (C<<
1013cases where sensitive or private data is being stored, such as with mail
690"<" >>) filehandle, and your program can subsequently read data
1014folders, cookie files, and internal temporary files.
691from it as if it were opened onto an ordinary, single file.
6921015
6931016=end original
6941017
695C<open> 3 番目の引数は
1018C<sysopen()> MASK 引数を使うことほとんどないでしょう。
696プログラム名 (C<sort>) とそ全ての引数含んだ文字列です:
1019これは、新しいファイルにどパーミッション与えるかというユーザーの
697この場合、C<-u> はユニークソート指定し、それからファイルグロブは
1020自由奪います。
698ソートするファイル指定することに注意してください。
1021選択拒むということは、ほとんど常ことです
699結果のファイルハンド C<$sort_fh> は
1022一つ例外は、メールォルダ、クッキーファイル、内部用一時ファイのような、
700ちょうど読み込み専用 (C<< "<" >>) ファルハンドルのように動作
1023微妙な、あるいはプラベートなデータを保管する場合でょう。
701プログラムは、通常の単一のファイルが開かれたかのように、
702引き続いてそこからデータを読み込むことができます。
7031024
704=head2 Opening a pipe for writing
1025=head1 Obscure Open Tricks
7051026
706(書き込み用パイプを開く)
1027(わかりくい開くときの小技)
7071028
1029=head2 Re-Opening Files (dups)
1030
1031(ファイルを再び開く(dup))
1032
7081033=begin original
7091034
710Continuing the previous example, let's say that your program has
1035Sometimes you already have a filehandle open, and want to make another
711completed its processing, and the results sit in an array called
1036handle that's a duplicate of the first one. In the shell, we place an
712C<@processed>. You want to print these lines to a file called
1037ampersand in front of a file descriptor number when doing redirections.
713C<numbered.txt> with a neatly formatted column of line-numbers.
1038For example, C<< 2>&1 >> makes descriptor 2 (that's STDERR in Perl)
1039be redirected into descriptor 1 (which is usually Perl's STDOUT).
1040The same is essentially true in Perl: a filename that begins with an
1041ampersand is treated instead as a file descriptor if a number, or as a
1042filehandle if a string.
7141043
7151044=end original
7161045
717前回の例の続きとし、プログラムの処理完成させて、
1046既に開いいるファイルハンドル持っいる時にこれを複製して
718結果は C<@processed> と呼ばれ配列に入っているしょう
1047もう一つのハンドルがほしくな場合がきどきあり
719これらの行 C<numbered.txt> いうファイル
1048シェルでは、リダイレクトするきにファイル記述子番号の前
720いい感じに整形された行番号の列と共に出力したいとします。
1049アンパサンドを置きます。
1050例えば C<< 2>&1 >> は、記述子 2 (これは Perl では STDERR) を
1051記述子 1 (これは Perl では普通は STDOUT) にリダイレクトします。
1052同じことは Perl でも基本的には真です: アンパサンドで始まるファイル名は、
1053それが数値ならファイル記述子、文字列ならファイルハンドルとして
1054扱われます。
7211055
1056 open(SAVEOUT, ">&SAVEERR") || die "couldn't dup SAVEERR: $!";
1057 open(MHCONTEXT, "<&4") || die "couldn't dup fd4: $!";
1058
7221059=begin original
7231060
724Certainly you could write your own code to do this ? or, once again,
1061That means that if a function is expecting a filename, but you don't
725you could kick that work over to another program. In this case, C<cat>,
1062want to give it a filename because you already have the file open, you
726running with its own C<-n> option to activate line numbering, should do
1063can just pass the filehandle with a leading ampersand. It's best to
727the trick:
1064use a fully qualified handle though, just in case the function happens
1065to be in a different package:
7281066
7291067=end original
7301068
731確かにこれをコードを自分で書くことできます - あるいは再び、
1069これは、もし関数がファイル名想定していけれども、既にファイルは
732作業他のプログラム送ることもできます。
1070開いているでファイル名渡したくない場合、単先頭にアンパサンドを
733この場合、C<cat> を、行番号付けを有効にす C<-n> オプション込みで
1071付けたファイルハンドル渡せということを意味します。
734実行するには次の技を使いす:
1072しかし万が一関数がたたま違うパッケージだったときのために、完全修飾した
1073ハンドルを渡すのが最善です:
7351074
736 open(my $cat_fh, '|-', 'cat -n > numbered.txt')
1075 somefunction("&main::LOGFILE");
737 or die "Couldn't open a pipe into cat: $!";
7381076
739 for my $line (@processed) {
1077=begin original
740 print $cat_fh $line;
1079This way if somefunction() is planning on opening its argument, it can
1080just use the already opened handle. This differs from passing a handle,
1081because with a handle, you don't open the file. Here you have something
1082you can pass to open.
1083
1084=end original
1085
1086この方法により、somefunction() が引数の値を開いた場合、
1087単に既に開いているハンドルを使えます。
1088これはハンドルを渡すのとは違います; なぜならハンドルではファイルを
1089開かないからです。
1090こちらでは開くときに指定できるものが指定できます。
1091
1092=begin original
1093
1094If you have one of those tricky, newfangled I/O objects that the C++
1095folks are raving about, then this doesn't work because those aren't a
1096proper filehandle in the native Perl sense. You'll have to use fileno()
1097to pull out the proper descriptor number, assuming you can:
1098
1099=end original
1100
1101もし、C++ 民が夢中になっているような巧妙で目新しい I/O オブジェクトの一つを
1102使っているなら、これらはネイティブな Perl 的に適切なファイルハンドルでは
1103ないので、上述のような方法は動作しません。
1104適切な記述子番号を得るために fileno() を使う必要があります; それが出来ると
1105仮定すれば:
1106
1107 use IO::Socket;
1108 $handle = IO::Socket::INET->new("www.perl.com:80");
1109 $fd = $handle->fileno;
1110 somefunction("&$fd"); # not an indirect function call
1111
1112=begin original
1113
1114It can be easier (and certainly will be faster) just to use real
1115filehandles though:
1116
1117=end original
1118
1119しかし、単に普通のファイルハンドルを使う方が簡単でしょう
1120(そして確実に高速です):
1121
1122 use IO::Socket;
1123 local *REMOTE = IO::Socket::INET->new("www.perl.com:80");
1124 die "can't connect" unless defined(fileno(REMOTE));
1125 somefunction("&main::REMOTE");
1126
1127=begin original
1128
1129If the filehandle or descriptor number is preceded not just with a simple
1130"&" but rather with a "&=" combination, then Perl will not create a
1131completely new descriptor opened to the same place using the dup(2)
1132system call. Instead, it will just make something of an alias to the
1133existing one using the fdopen(3S) library call. This is slightly more
1134parsimonious of systems resources, although this is less a concern
1135these days. Here's an example of that:
1136
1137=end original
1138
1139もしファイルハンドルや記述子番号の前にあるのが単なる "&" ではなく "&=" の
1140組み合わせの場合、Perl は dup(2) システムコールを使って同じ場所で開いた
1141完全に新しい記述子は作りません。
1142代わりに、fdopen(3S) ライブラリコールを使ってすでにある記述子の別名的な
1143ものを作ります。
1144これはシステムのリソースを少しケチることが出来ますが、最近ではこれは
1145あまり関心を持たれなくなりました。
1146以下はこの例です:
1147
1148 $fd = $ENV{"MHCONTEXTFD"};
1149 open(MHCONTEXT, "<&=$fd") or die "couldn't fdopen $fd: $!";
1150
1151=begin original
1152
1153If you're using magic C<< <ARGV> >>, you could even pass in as a
1154command line argument in @ARGV something like C<"<&=$MHCONTEXTFD">,
1155but we've never seen anyone actually do this.
1156
1157=end original
1158
1159もしマジカルな C<< <ARGV> >> を使っているなら、C<"<&=$MHCONTEXTFD"> の
1160ような感じで @ARGV 内のコマンドライン引数として渡すことすら可能ですが、
1161実際にこれをしている人を見たことはありません。
1162
1163=head2 Dispelling the Dweomer
1164
1165(魔法を解く)
1166
1167=begin original
1168
1169Perl is more of a DWIMmer language than something like Java--where DWIM
1170is an acronym for "do what I mean". But this principle sometimes leads
1171to more hidden magic than one knows what to do with. In this way, Perl
1172is also filled with I<dweomer>, an obscure word meaning an enchantment.
1173Sometimes, Perl's DWIMmer is just too much like dweomer for comfort.
1174
1175=end original
1176
1177Perl は、Java のような言語よりも「空気を読む」(DWIM)言語です --
1178DWIM とは "do what I mean" の略です。
1179しかし、この原則は時々利用者が知っている以上の隠れた動作をすることが
1180あります。
1181こんな風に、Perl は (魔法を意味する不明確な単語である) I<dweomer> にも
1182満ちています。
1183時々、Perl の空気の読み方は快適さのために魔法のようになります。
1184
1185=begin original
1186
1187If magic C<open> is a bit too magical for you, you don't have to turn
1188to C<sysopen>. To open a file with arbitrary weird characters in
1189it, it's necessary to protect any leading and trailing whitespace.
1190Leading whitespace is protected by inserting a C<"./"> in front of a
1191filename that starts with whitespace. Trailing whitespace is protected
1192by appending an ASCII NUL byte (C<"\0">) at the end of the string.
1193
1194=end original
1195
1196もしマジカルな C<open> があなたにとってちょっとマジカルすぎるとしても、
1197C<sysopen> にまで戻る必要はありません。
1198ファイル名にどんな変な文字が含まれているファイルでも開くためには、
1199先頭と末尾の空白を保護する必要があります。
1200先頭の空白は、空白で始まるファイル名の前に C<"./"> を挿入することで
1201保護します。
1202末尾の空白は、文字列の末尾に ASCII NUL バイト (C<"\0">) を
1203追加することで保護します。
1204
1205 $file =~ s#^(\s)#./$1#;
1206 open(FH, "< $file\0") || die "can't open $file: $!";
1207
1208=begin original
1209
1210This assumes, of course, that your system considers dot the current
1211working directory, slash the directory separator, and disallows ASCII
1212NULs within a valid filename. Most systems follow these conventions,
1213including all POSIX systems as well as proprietary Microsoft systems.
1214The only vaguely popular system that doesn't work this way is the
1215"Classic" Macintosh system, which uses a colon where the rest of us
1216use a slash. Maybe C<sysopen> isn't such a bad idea after all.
1217
1218=end original
1219
1220これはもちろん、あなたのシステムが "." をカレントディレクトリ、
1221"/" をディレクトリの区切りとして扱い、ASCII NUL をファイル名として
1222認めていないということを仮定しています。
1223全ての POSIX システムとプロプリエタリの Microsoft システムを含む、
1224ほとんどのシステムはこの慣例に従っています。
1225これに従わない、一般的に有名な唯一のシステムは
1226"Classic" Macintosh システムです; これは他のシステムが "/" を
1227使っているところで ":" を使います。
1228おそらく、とにかく C<sysopen> を使うということはそれほど悪い考えでは
1229ありません。
1230
1231=begin original
1232
1233If you want to use C<< <ARGV> >> processing in a totally boring
1234and non-magical way, you could do this first:
1235
1236=end original
1237
1238もし、C<< <ARGV> >> の処理を、本当に退屈かつマジカルでない方法で
1239行いたいなら、まず以下のようにできます:
1240
1241 # "Sam sat on the ground and put his head in his hands.
1242 # 'I wish I had never come here, and I don't want to see
1243 # no more magic,' he said, and fell silent."
1244 for (@ARGV) {
1245 s#^([^./])#./$1#;
1246 $_ .= "\0";
1247 }
1248 while (<>) {
1249 # now process $_
1250 }
1251
1252=begin original
1253
1254But be warned that users will not appreciate being unable to use "-"
1255to mean standard input, per the standard convention.
1256
1257=end original
1258
1259但し、ユーザーは、標準入力を意味するために "-" を使うという一般的な
1260慣習が使えないということを喜ばないだろうということは
1261警告しておきます。
1262
1263=head2 Paths as Opens
1264
1265(open にパスを)
1266
1267=begin original
1268
1269You've probably noticed how Perl's C<warn> and C<die> functions can
1270produce messages like:
1271
1272=end original
1273
1274どうやって Perl の C<warn> 関数と C<die> 関数が以下のようなメッセージを
1275生成するかに気付いたでしょう:
1276
1277 Some warning at scriptname line 29, <FH> line 7.
1278
1279=begin original
1280
1281That's because you opened a filehandle FH, and had read in seven records
1282from it. But what was the name of the file, rather than the handle?
1283
1284=end original
1285
1286これは、あなたがファイルハンドル FH を開いて、そこから 7 レコードを
1287読み込んだからです。
1288しかし、ハンドルではなく、ファイル名はどうでしょう?
1289
1290=begin original
1291
1292If you aren't running with C<strict refs>, or if you've turned them off
1293temporarily, then all you have to do is this:
1294
1295=end original
1296
1297もし C<strict refs> を有効にしていないか、一時的に無効にしているなら、
1298する必要があるのは以下のことだけです:
1299
1300 open($path, "< $path") || die "can't open $path: $!";
1301 while (<$path>) {
1302 # whatever
1303 }
1304
1305=begin original
1306
1307Since you're using the pathname of the file as its handle,
1308you'll get warnings more like
1309
1310=end original
1311
1312ファイルのパス名をハンドルとして使っているので、以下のような警告が
1313出ます
1314
1315 Some warning at scriptname line 29, </etc/motd> line 7.
1316
1317=head2 Single Argument Open
1318
1319(1 引数の open)
1320
1321=begin original
1322
1323Remember how we said that Perl's open took two arguments? That was a
1324passive prevarication. You see, it can also take just one argument.
1325If and only if the variable is a global variable, not a lexical, you
1326can pass C<open> just one argument, the filehandle, and it will
1327get the path from the global scalar variable of the same name.
1328
1329=end original
1330
1331Perl の open は 2 引数を取ると言ったことを覚えていますか?
1332これは消極的なごまかしです。
1333ほら、単に 1 引数を取ることもできます。
1334変数がレキシカルではなくグローバルな変数の場合にのみ、C<open> に
13351 引数だけ(ファイルハンドル)を渡すことができます; こうすると、
1336同じ名前を持つグローバルなスカラ変数からパスを取ります。
1337
1338 $FILE = "/etc/motd";
1339 open FILE or die "can't open $FILE: $!";
1340 while (<FILE>) {
1341 # whatever
1342 }
1343
1344=begin original
1345
1346Why is this here? Someone has to cater to the hysterical porpoises.
1347It's something that's been in Perl since the very beginning, if not
1348before.
1349
1350=end original
1351
1352どうしてこれはここなんでしょう?
1353誰かがヒステリックなネズミイルカの要求を満たす必要があります。
1354これは(遅くとも)非常に初期から Perl にあります。
1355
1356=head2 Playing with STDIN and STDOUT
1357
1358(STDIN と STDOUT を扱う)
1359
1360=begin original
1361
1362One clever move with STDOUT is to explicitly close it when you're done
1363with the program.
1364
1365=end original
1366
1367STDOUT に関する一つの利口な行動は、プログラムの終了時に
1368明示的に閉じることです。
1369
1370 END { close(STDOUT) || die "can't close stdout: $!" }
1371
1372=begin original
1373
1374If you don't do this, and your program fills up the disk partition due
1375to a command line redirection, it won't report the error exit with a
1376failure status.
1377
1378=end original
1379
1380これをしないままで、このプログラムがコマンドラインリダイレクトによって
1381ディスクをいっぱいにしてしまっても、失敗状態でエラー終了しません。
1382
1383=begin original
1384
1385You don't have to accept the STDIN and STDOUT you were given. You are
1386welcome to reopen them if you'd like.
1387
1388=end original
1389
1390与えられた STDIN と STDOUT を受け入れる必要はありません。
1391もし望むなら、これらを開き直せます。
1392
1393 open(STDIN, "< datafile")
1394 || die "can't open datafile: $!";
1395
1396 open(STDOUT, "> output")
1397 || die "can't open output: $!";
1398
1399=begin original
1400
1401And then these can be accessed directly or passed on to subprocesses.
1402This makes it look as though the program were initially invoked
1403with those redirections from the command line.
1404
1405=end original
1406
1407それからこれらは直接アクセスしたり子プロセスに渡したりできます。
1408これらは、プログラムの起動時にコマンドラインからリダイレクトが
1409与えられたかのように動作します。
1410
1411=begin original
1412
1413It's probably more interesting to connect these to pipes. For example:
1414
1415=end original
1416
1417これらをパイプにつなぐ方がより興味深いでしょう。
1418例えば:
1419
1420 $pager = $ENV{PAGER} || "(less || more)";
1421 open(STDOUT, "| $pager")
1422 || die "can't fork a pager: $!";
1423
1424=begin original
1425
1426This makes it appear as though your program were called with its stdout
1427already piped into your pager. You can also use this kind of thing
1428in conjunction with an implicit fork to yourself. You might do this
1429if you would rather handle the post processing in your own program,
1430just in a different process:
1431
1432=end original
1433
1434これによって、プログラムの標準出力がが既にページャとパイプで
1435つながれているかのように見えます。
1436このようなことはまた、自分自身を暗黙に fork したものと結合するためにも
1437使えます。
1438自分自身のプログラムの別のプロセスでで後処理を扱いたい場合、
1439以下のようにできます:
1440
1441 head(100);
1442 while (<>) {
1443 print;
1444 }
1445
1446 sub head {
1447 my $lines = shift || 20;
1448 return if $pid = open(STDOUT, "|-"); # return if parent
1449 die "cannot fork: $!" unless defined $pid;
1450 while (<STDIN>) {
1451 last if --$lines < 0;
1452 print;
1453 }
1454 exit;
1455 }
1456
1457=begin original
1458
1459This technique can be applied to repeatedly push as many filters on your
1460output stream as you wish.
1461
1462=end original
1463
1464このテクニックは、繰り返しプッシュすることで、出力ストリームに好きなだけ
1465多くのフィルタを適用できます。
1466
1467=head1 Other I/O Issues
1468
1469(その他の I/O 関連の話題)
1470
1471=begin original
1472
1473These topics aren't really arguments related to C<open> or C<sysopen>,
1474but they do affect what you do with your open files.
1475
1476=end original
1477
1478これらの話題は実際には C<open> や C<sysopen> に関連したものではありませんが、
1479ファイルを開くときに行うことに影響を与えます。
1480
1481=head2 Opening Non-File Files
1482
1483(ファイルでないファイルを開く)
1484
1485=begin original
1486
1487When is a file not a file? Well, you could say when it exists but
1488isn't a plain file. We'll check whether it's a symbolic link first,
1489just in case.
1490
1491=end original
1492
1493ファイルがファイルでないときは?
1494えっと、プレーンファイルでないもののとき、と言いたいんですよね。
1495まず、念のために、それがシンボリックリンクかどうかを調べます。
1496
1497 if (-l $file || ! -f _) {
1498 print "$file is not a plain file\n";
1499 }
1500
1501=begin original
1502
1503What other kinds of files are there than, well, files? Directories,
1504symbolic links, named pipes, Unix-domain sockets, and block and character
1505devices. Those are all files, too--just not I<plain> files. This isn't
1506the same issue as being a text file. Not all text files are plain files.
1507Not all plain files are text files. That's why there are separate C<-f>
1508and C<-T> file tests.
1509
1510=end original
1511
1512えーと、ファイルの他にどんな種類のファイルがあるのでしょう?
1513ディレクトリ、シンボリックリンク、名前付きパイプ、Unix ドメインソケット、
1514キャラクタデバイス、ブロックデバイスです。
1515これらも全てファイルです -- 単に I<プレーン> ファイルではないと
1516いうだけです。
1517これはテキストファイルと同じ問題ではありません。
1518全てのテキストファイルがプレーンファイルではありません。
1519全てのプレーンファイルがテキストファイルではありません。
1520これが、C<-f> と C<-T> のファイルテストが分離している理由です。
1521
1522=begin original
1523
1524To open a directory, you should use the C<opendir> function, then
1525process it with C<readdir>, carefully restoring the directory
1526name if necessary:
1527
1528=end original
1529
1530ディレクトリを開くには、C<opendir> 関数を使って、それから
1531C<readdir> で処理します; もし必要なら注意深くディレクトリ名を復元します:
1532
1533 opendir(DIR, $dirname) or die "can't opendir $dirname: $!";
1534 while (defined($file = readdir(DIR))) {
1535 # do something with "$dirname/$file"
7411536 }
1537 closedir(DIR);
7421538
7431539=begin original
7441540
745Here, we use a second C<open> argument of C<"|-">, signifying that the
1541If you want to process directories recursively, it's better to use the
746filehandle assigned to C<$cat_fh> should be a write-pipe. We can then
1542File::Find module. For example, this prints out all files recursively
747use it just as we would a write-only ordinary filehandle, including the
1543and adds a slash to their names if the file is a directory.
748basic function of C<print>-ing data to it.
7491544
7501545=end original
7511546
752ここでC<open> の 2 番目の引数に C<"|-"> を使います;
1547ディレクトリを再帰的に処理したい場合はFile::Find モジュールを使った方が
753これにより、C<$cat_fh> に代入されるファイルハンドルが書き込み
1548いいでしょう。
754パイプであるを示します。
1549例えば、れは全てのファイル再帰的に表示して、もしファイルが
755それから、ータ C<print> る基本的な関数を含めて、
1550ィレクトリの場合は末尾にスラッシュ追加しま
756書き込み専用の普通のファイルハンドルを使うのと同じようにこれを使えます。
7571551
1552 @ARGV = qw(.) unless @ARGV;
1553 use File::Find;
1554 find sub { print $File::Find::name, -d && '/', "\n" }, @ARGV;
1555
7581556=begin original
7591557
760Note that the third argument, specifying the command that we wish to
1558This finds all bogus symbolic links beneath a particular directory:
761pipe to, sets up C<cat> to redirect its output via that C<< ">" >>
762symbol into the file C<numbered.txt>. This can start to look a little
763tricky, because that same symbol would have meant something
764entirely different had it showed it in the second argument to C<open>!
765But here in the third argument, it's simply part of the shell command that
766Perl will open the pipe into, and Perl itself doesn't invest any special
767meaning to it.
7681559
7691560=end original
7701561
771パイプしたいコマ指定る 3 番目の引数は、
1562以下は、特定のディレクトリ以下から偽のシボリックリンク全て探しま:
772C<cat> の出力を C<< ">" >> 記号を使ってファイル C<numbered.txt> に
773リダイレクトするように指定していることに注意してください。
774これは最初は少しおかしく見えるかもしれません;
775この同じ記号は、C<open> の 2 番目の引数では全く違うものを意味するからです!
776しかし、ここ 3 番目の引数では、これは単に Perl がパイプを開く
777シェルコマンドの一部であり、Perl 自身はこれに何の特別な意味も与えません。
7781563
779=head2 Expressing the command as a list
1564 find sub { print "$File::Find::name\n" if -l && !-e }, $dir;
7801565
781(コマンドをリストとして表現する)
1566=begin original
7821567
1568As you see, with symbolic links, you can just pretend that it is
1569what it points to. Or, if you want to know I<what> it points to, then
1570C<readlink> is called for:
1571
1572=end original
1573
1574上述したように、シンボリックリンクの場合、単にそれが指しているもの振りを
1575することができます。
1576あるいは、もしそれが I<何を> 指しているのかを知りたい場合は、
1577C<readlink> を呼び出します:
1578
1579 if (-l $file) {
1580 if (defined($whither = readlink($file))) {
1581 print "$file points to $whither\n";
1582 } else {
1583 print "$file points nowhere: $!\n";
1584 }
1585 }
1586
1587=head2 Opening Named Pipes
1588
1589(名前付きパイプを開く)
1590
7831591=begin original
7841592
785For opening pipes, Perl offers the option to call C<open> with a list
1593Named pipes are a different matter. You pretend they're regular files,
786comprising the desired command and all its own arguments as separate
1594but their opens will normally block until there is both a reader and
787elements, rather than combining them into a single string as in the
1595a writer. You can read more about them in L<perlipc/"Named Pipes">.
788examples above. For instance, we could have phrased the C<open> call in
1596Unix-domain sockets are rather different beasts as well; they're
789the first example like this:
1597described in L<perlipc/"Unix-Domain TCP Clients and Servers">.
7901598
7911599=end original
7921600
793パイプを開くために、Perl 、目的コマンドとそれ自身の引数を、
1601名前付きパイプは問題です。
794前述のように単一の文字列として結合するのなく、
1602これらは普通ファイルのように舞いますが、こ open 普通
795別個の要素して構成されたリストで C<open> を呼び出という
1603読み込み側書き込み側の両方ができるまでブロックされ
796選択肢を提供してます。
1604これらにつては L<perlipc/"Named Pipes"> でより多くのことを
797例えば、最初の例の C<open> 呼び出しは次のように書けます:
1605読むことができます
1606Unix ドメインソケットは同様にやや違うものです;
1607これらは L<perlipc/"Unix-Domain TCP Clients and Servers"> に
1608記述されています。
7981609
799 open(my $sort_fh, '-|', 'sort', '-u', glob('unsorted/*.txt'))
1610=begin original
800 or die "Couldn't open a pipe into sort: $!";
8011611
1612When it comes to opening devices, it can be easy and it can be tricky.
1613We'll assume that if you're opening up a block device, you know what
1614you're doing. The character devices are more interesting. These are
1615typically used for modems, mice, and some kinds of printers. This is
1616described in L<perlfaq8/"How do I read and write the serial port?">
1617It's often enough to open them carefully:
1618
1619=end original
1620
1621デバイスを開くときは、簡単にもなりますしトリッキーにもなります。
1622ブロックデバイスを開こうとしているなら、何をしようとしているのか
1623分かっていることを仮定します。
1624キャラクタデバイスはもっと興味深いです。
1625これらは典型的にはモデム、マウス、ある種のプリンタのために使われます。
1626これは L<perlfaq8/"How do I read and write the serial port?"> に
1627記述されています。
1628しばしば慎重に開くだけで充分です:
1629
1630 sysopen(TTYIN, "/dev/ttyS1", O_RDWR | O_NDELAY | O_NOCTTY)
1631 # (O_NOCTTY no longer needed on POSIX systems)
1632 or die "can't open /dev/ttyS1: $!";
1633 open(TTYOUT, "+>&TTYIN")
1634 or die "can't dup TTYIN: $!";
1635
1636 $ofh = select(TTYOUT); $| = 1; select($ofh);
1637
1638 print TTYOUT "+++at\015";
1639 $answer = <TTYIN>;
1640
8021641=begin original
8031642
804When you call C<open> this way, Perl invokes the given command directly,
1643With descriptors that you haven't opened using C<sysopen>, such as
805bypassing the shell. As such, the shell won't try to interpret any
1644sockets, you can set them to be non-blocking using C<fcntl>:
806special characters within the command's argument list, which might
807overwise have unwanted effects. This can make for safer, less
808error-prone C<open> calls, useful in cases such as passing in variables
809as arguments, or even just referring to filenames with spaces in them.
8101645
8111646=end original
8121647
813方法で C<open> を呼び出す場合、
1648ソケットように、C<sysopen> を使わずに開いた記述子の場合
814Perl はシェルバイパスし指定されたコマンを直接起動します
1649C<fcntl>使っ非ブロックモーに設定できます:
815シェルはコマンド路の引数リストの中の特殊文字を解釈しようとはしません;
816さもなければ望まない効果を生むことがあります。
817これはより安全で、C<open> 呼び出しの誤りを減らし、
818引数として変数の内容を渡すような場合に有用で、
819単に空白を含むファイルを参照する場合にも安全です。
8201650
1651 use Fcntl;
1652 my $old_flags = fcntl($handle, F_GETFL, 0)
1653 or die "can't get flags: $!";
1654 fcntl($handle, F_SETFL, $old_flags | O_NONBLOCK)
1655 or die "can't set non blocking: $!";
1656
8211657=begin original
8221658
823However, when you I<do> want to pass a meaningful metacharacter to the
1659Rather than losing yourself in a morass of twisting, turning C<ioctl>s,
824shell, such with the C<"*"> inside that final C<unsorted/*.txt> argument
1660all dissimilar, if you're going to manipulate ttys, it's best to
825here, you can't use this alternate syntax. In this case, we have worked
1661make calls out to the stty(1) program if you have it, or else use the
826around it via Perl's handy C<glob> built-in function, which evaluates
1662portable POSIX interface. To figure this all out, you'll need to read the
827its argument into a list of filenames ? and we can safely pass that
1663termios(3) manpage, which describes the POSIX interface to tty devices,
828resulting list right into C<open>, as shown above.
1664and then L<POSIX>, which describes Perl's interface to POSIX. There are
1665also some high-level modules on CPAN that can help you with these games.
1666Check out Term::ReadKey and Term::ReadLine.
8291667
8301668=end original
8311669
832し、シェルに意味のあメタ文字を I<渡したい>
1670 tty を操作ようとしているなら全く異なC<ioctl> の泥沼に
833例えば最終的C<unsorted/*.txt> の中の C<"*"> のよう場合
1671迷い込むのではく、もし stty(1) プログラムがあるらこれを呼び出して
834代替文法は使えません
1672さもなければ移植性ある POSIX インターフェースを使うのが最善です
835この場合、引数をファイル名評価する Perl便利な C<glob> 組み込み関数で
1673れらを理解するには、まず tty デバイスへPOSIX
836回避します; そし述したように、結果のリストを C<open> に安全
1674インターフェースについ述している termios(3) man ページを読んで、次
837渡せます。
1675POSIX への Perl のインターフェースについて記述している L<POSIX> を
1676読む必要があります。
1677これらのものを扱う助けになるような高レベルモジュールも CPAN にあります。
1678Term::ReadKey と Term::ReadLine を調べてください。
8381679
1680=head2 Opening Sockets
1681
1682(ソケットを開く)
1683
8391684=begin original
8401685
841Note also that representing piped-command arguments in list form like
1686What else can you open? To open a connection using sockets, you won't use
842this doesn't work on every platform. It will work on any Unix-based OS
1687one of Perl's two open functions. See
843that provides a real C<fork> function (e.g. macOS or Linux), as well as
1688L<perlipc/"Sockets: Client/Server Communication"> for that. Here's an
844on Windows when running Perl 5.22 or later.
1689example. Once you have it, you can use FH as a bidirectional filehandle.
8451690
8461691=end original
8471692
848また、こようなリスト形式でパイプコマンド引数表現は、全ての
1693何を開ける?
849プラットフォームで動作するわけではないことに注意してださい。
1694ソケットを使った接続を開には、Perl の 2 つの open 関数のどちらも
850真の C<fork> 関数を提供する Unix ベースの OS (例えば macOS や Linux)、
1695使いません。
851および Perl 5.22 以降の Windows では動作します。
1696そのためには L<perlipc/"Sockets: Client/Server Communication">
1697参照してください。
1698以下は例です。
1699これを実行すると、FH を双方向ファイルハンドルとして使えます。
8521700
853=head1 SEE ALSO
1701 use IO::Socket;
1702 local *FH = IO::Socket::INET->new("www.perl.com:80");
8541703
8551704=begin original
8561705
857The full documentation for L<C<open>|perlfunc/open FILEHANDLE,MODE,EXPR>
1706For opening up a URL, the LWP modules from CPAN are just what
858provides a thorough reference to this function, beyond the best-practice
1707the doctor ordered. There's no filehandle interface, but
859basics covered here.
1708it's still easy to get the contents of a document:
8601709
8611710=end original
8621711
863L<C<open>|perlfunc/open FILEHANDLE,MODE,EXPR> の完全な文書は、
1712URL を開くには、CPAN にある LWP モジュールがぴったりです。
864ここでカバしているベストプラクティスベースのものを超えて
1713ファイルハンドルのインタフェースはないですが
865関数の完全なリファレンス提供します
1714それでも簡単に文書中身得られます:
8661715
1716 use LWP::Simple;
1717 $doc = get('http://www.linpro.no/lwp/');
1718
1719=head2 Binary Files
1720
1721(バイナリファイル)
1722
1723=begin original
1724
1725On certain legacy systems with what could charitably be called terminally
1726convoluted (some would say broken) I/O models, a file isn't a file--at
1727least, not with respect to the C standard I/O library. On these old
1728systems whose libraries (but not kernels) distinguish between text and
1729binary streams, to get files to behave properly you'll have to bend over
1730backwards to avoid nasty problems. On such infelicitous systems, sockets
1731and pipes are already opened in binary mode, and there is currently no
1732way to turn that off. With files, you have more options.
1733
1734=end original
1735
1736最終的に (壊れていると言われる) I/O モデルに巻き込まれると寛大にも
1737呼ばれるある種の古いシステムでは、ファイルはファイルではありません --
1738少なくとも C 標準 I/O ライブラリという観点では。
1739(カーネルではなく)ライブラリがテキストストリームとバイナリストリームを
1740区別するような古いシステムでは、適切に振る舞うようにファイルを
1741取得するためには、不愉快な問題を避けるために懸命な努力が必要です。
1742このような不幸なシステムでは、ソケットとパイプは既にバイナリモードで
1743開いていて、今のところこれをオフにする方法はありません。
1744ファイルに対しては、もっと選択肢があります。
1745
1746=begin original
1747
1748Another option is to use the C<binmode> function on the appropriate
1749handles before doing regular I/O on them:
1750
1751=end original
1752
1753もう一つの選択肢は、通常の I/O を行う前に、適切なファイルハンドルに
1754C<binmode> 関数を使うことです:
1755
1756 binmode(STDIN);
1757 binmode(STDOUT);
1758 while (<STDIN>) { print }
1759
1760=begin original
1761
1762Passing C<sysopen> a non-standard flag option will also open the file in
1763binary mode on those systems that support it. This is the equivalent of
1764opening the file normally, then calling C<binmode> on the handle.
1765
1766=end original
1767
1768C<sysopen> に非標準フラグオプションを渡すことでも、そのような
1769システムでバイナリモードでファイルを開けます。
1770これは、ファイルを普通に開いてから、ハンドルに対して C<binmode> を
1771呼び出すのと等価です。
1772
1773 sysopen(BINDAT, "records.data", O_RDWR | O_BINARY)
1774 || die "can't open records.data: $!";
1775
1776=begin original
1777
1778Now you can use C<read> and C<print> on that handle without worrying
1779about the non-standard system I/O library breaking your data. It's not
1780a pretty picture, but then, legacy systems seldom are. CP/M will be
1781with us until the end of days, and after.
1782
1783=end original
1784
1785これで、非標準システム I/O ライブラリがデータを壊す心配なしに
1786ハンドルに対して C<read> と C<print> を使えるようになりました。
1787これは美しい形ではありませんが、レガシーシステムとは大抵そういうものです。
1788CP/M は世界が終わるまで(そしてその後も)我々と共にあるでしょう。
1789
1790=begin original
1791
1792On systems with exotic I/O systems, it turns out that, astonishingly
1793enough, even unbuffered I/O using C<sysread> and C<syswrite> might do
1794sneaky data mutilation behind your back.
1795
1796=end original
1797
1798風変わりな I/O システムを持つシステムでは、驚いたことに、
1799C<sysread> や C<syswrite> を使ったバッファリングしない I/O でさえも
1800背後でこっそりとデータ操作をすることがあります。
1801
1802 while (sysread(WHENCE, $buf, 1024)) {
1803 syswrite(WHITHER, $buf, length($buf));
1804 }
1805
1806=begin original
1807
1808Depending on the vicissitudes of your runtime system, even these calls
1809may need C<binmode> or C<O_BINARY> first. Systems known to be free of
1810such difficulties include Unix, the Mac OS, Plan 9, and Inferno.
1811
1812=end original
1813
1814実行させるシステムの紆余曲折具合によっては、これらのシステムコールですら
1815最初に C<binmode> や C<O_BINARY> が必要かもしれません。
1816このような問題がないと分かっているシステムには Unix, Mac OS, Plan 9,
1817Inferno などがあります。
1818
1819=head2 File Locking
1820
1821(ファイルのロック)
1822
1823=begin original
1824
1825In a multitasking environment, you may need to be careful not to collide
1826with other processes who want to do I/O on the same files as you
1827are working on. You'll often need shared or exclusive locks
1828on files for reading and writing respectively. You might just
1829pretend that only exclusive locks exist.
1830
1831=end original
1832
1833マルチタスク環境では、あなたが触ろうとしているファイルと同じファイルを
1834他のプロセスが衝突しないように気をつける必要があります。
1835しばしば、ファイルを読み込みまたは書き込みするために、それぞれ
1836共有ロックと排他ロックが必要になります。
1837あるいは、単に排他ロックしかないような振りをするかもしれません。
1838
1839=begin original
1840
1841Never use the existence of a file C<-e $file> as a locking indication,
1842because there is a race condition between the test for the existence of
1843the file and its creation. It's possible for another process to create
1844a file in the slice of time between your existence check and your attempt
1845to create the file. Atomicity is critical.
1846
1847=end original
1848
1849決して、ファイルの存在 C<-e $file> をロック指示に使わないでください;
1850なぜならファイルの存在のテストとその作成の間に競合条件があるからです。
1851存在チェックとファイル作成のわずかな間に、他のプロセスがファイルを作る
1852可能性があります。
1853原子性は危機的です。
1854
1855=begin original
1856
1857Perl's most portable locking interface is via the C<flock> function,
1858whose simplicity is emulated on systems that don't directly support it
1859such as SysV or Windows. The underlying semantics may affect how
1860it all works, so you should learn how C<flock> is implemented on your
1861system's port of Perl.
1862
1863=end original
1864
1865Perl でのもっとも移植性のあるロックインターフェースは、
1866C<flock> 関数によるものです; この単純さは、SysV や Windows のような、
1867これに直接対応していないシステムでもエミュレートされています。
1868基礎となる動作はこれがどのように働くかに影響を与えるので、
1869あなたが使うシステムの Perl で C<flock> がどのように実装されているかを
1870学ぶべきです。
1871
1872=begin original
1873
1874File locking I<does not> lock out another process that would like to
1875do I/O. A file lock only locks out others trying to get a lock, not
1876processes trying to do I/O. Because locks are advisory, if one process
1877uses locking and another doesn't, all bets are off.
1878
1879=end original
1880
1881ファイルロックは、他のプロセスが I/O 操作を行うことからロックするもの
1882I<ではありません>。
1883ファイルロックは、他のプロセスの I/O 操作をロックするのではなく、他の
1884プロセスがロックを得ようとすることをロックします。
1885ロックは勧告的なので、あるプロセスがロックを使っていても、他の
1886プロセスがロックを使っていなければ、全ては台無しになります。
1887
1888=begin original
1889
1890By default, the C<flock> call will block until a lock is granted.
1891A request for a shared lock will be granted as soon as there is no
1892exclusive locker. A request for an exclusive lock will be granted as
1893soon as there is no locker of any kind. Locks are on file descriptors,
1894not file names. You can't lock a file until you open it, and you can't
1895hold on to a lock once the file has been closed.
1896
1897=end original
1898
1899デフォルトでは、C<flock> 呼び出しは、ロックが得られるまでブロックします。
1900共有ロック要求は、誰も排他ロックを持っていない状態になれば直ちに
1901受け入れられます。
1902排他ロック要求は、誰もあらゆる種類のロックを守っていない状態になれば
1903与えられます。
1904ロックはファイル名に対してではなく、ファイル記述子について与えられます。
1905ファイルを開かずにファイルをロックすることはできませんし、ファイルを閉じた
1906後もロックを持ったままにすることもできません。
1907
1908=begin original
1909
1910Here's how to get a blocking shared lock on a file, typically used
1911for reading:
1912
1913=end original
1914
1915以下はファイルに対してブロックする共有ロックを得る方法で、
1916典型的には読み込み時に使われます:
1917
1918 use 5.004;
1919 use Fcntl qw(:DEFAULT :flock);
1920 open(FH, "< filename") or die "can't open filename: $!";
1921 flock(FH, LOCK_SH) or die "can't lock filename: $!";
1922 # now read from FH
1923
1924=begin original
1925
1926You can get a non-blocking lock by using C<LOCK_NB>.
1927
1928=end original
1929
1930C<LOCK_NB> を使うことでブロックしないロックも得られます。
1931
1932 flock(FH, LOCK_SH | LOCK_NB)
1933 or die "can't lock filename: $!";
1934
1935=begin original
1936
1937This can be useful for producing more user-friendly behaviour by warning
1938if you're going to be blocking:
1939
1940=end original
1941
1942ブロックするときに警告することで、よりユーザーにやさしい振る舞いを
1943することは有用です:
1944
1945 use 5.004;
1946 use Fcntl qw(:DEFAULT :flock);
1947 open(FH, "< filename") or die "can't open filename: $!";
1948 unless (flock(FH, LOCK_SH | LOCK_NB)) {
1949 $| = 1;
1950 print "Waiting for lock...";
1951 flock(FH, LOCK_SH) or die "can't lock filename: $!";
1952 print "got it.\n"
1953 }
1954 # now read from FH
1955
1956=begin original
1957
1958To get an exclusive lock, typically used for writing, you have to be
1959careful. We C<sysopen> the file so it can be locked before it gets
1960emptied. You can get a nonblocking version using C<LOCK_EX | LOCK_NB>.
1961
1962=end original
1963
1964(典型的には書き込みのために) 排他ロックを得るためには、慎重になる
1965必要があります。
1966空なる前にロックするために、ファイルを C<sysopen> で開きます。
1967C<LOCK_EX | LOCK_NB> を使った非ブロック版も得られます。
1968
1969 use 5.004;
1970 use Fcntl qw(:DEFAULT :flock);
1971 sysopen(FH, "filename", O_WRONLY | O_CREAT)
1972 or die "can't open filename: $!";
1973 flock(FH, LOCK_EX)
1974 or die "can't lock filename: $!";
1975 truncate(FH, 0)
1976 or die "can't truncate filename: $!";
1977 # now write to FH
1978
1979=begin original
1980
1981Finally, due to the uncounted millions who cannot be dissuaded from
1982wasting cycles on useless vanity devices called hit counters, here's
1983how to increment a number in a file safely:
1984
1985=end original
1986
1987最後に、アクセスカウンタと呼ばれる無駄で空虚な装置のために CPU パワーを
1988無駄遣いすることから逃れられない無慮数百万のために、
1989あるファイルの数値を安全に増加させる方法を以下に示します:
1990
1991 use Fcntl qw(:DEFAULT :flock);
1992
1993 sysopen(FH, "numfile", O_RDWR | O_CREAT)
1994 or die "can't open numfile: $!";
1995 # autoflush FH
1996 $ofh = select(FH); $| = 1; select ($ofh);
1997 flock(FH, LOCK_EX)
1998 or die "can't write-lock numfile: $!";
1999
2000 $num = <FH> || 0;
2001 seek(FH, 0, 0)
2002 or die "can't rewind numfile : $!";
2003 print FH $num+1, "\n"
2004 or die "can't write numfile: $!";
2005
2006 truncate(FH, tell(FH))
2007 or die "can't truncate numfile: $!";
2008 close(FH)
2009 or die "can't close numfile: $!";
2010
2011=head2 IO Layers
2012
2013(IO 層)
2014
2015=begin original
2016
2017In Perl 5.8.0 a new I/O framework called "PerlIO" was introduced.
2018This is a new "plumbing" for all the I/O happening in Perl; for the
2019most part everything will work just as it did, but PerlIO also brought
2020in some new features such as the ability to think of I/O as "layers".
2021One I/O layer may in addition to just moving the data also do
2022transformations on the data. Such transformations may include
2023compression and decompression, encryption and decryption, and transforming
2024between various character encodings.
2025
2026=end original
2027
2028Perl 5.8.0 で、"PerlIO" と呼ばれる新しい I/O フレームワークが
2029導入されました。
2030これは Perl で発生する全ての I/O のための新しい「配管」です;
2031ほとんど全ての部分では単に今まで通りに動作しますが、
2032I/O を「層」として考えるための機能のような、新しい要素も導入されています。
2033ある I/O 層は単にデータを移動させるだけでなく、データを変換するかも知れません。
2034このような変換には、圧縮と展開、暗号化と復号化、様々な文字エンコーディング間の
2035変換を含むかも知れません。
2036
2037=begin original
2038
2039Full discussion about the features of PerlIO is out of scope for this
2040tutorial, but here is how to recognize the layers being used:
2041
2042=end original
2043
2044PerlIO の機能に関する完全な議論はこのチュートリアルの対象外ですが、
2045層が使われていることをどうやって認識するかを以下に示します:
2046
2047=over 4
2048
2049=item *
2050
2051=begin original
2052
2053The three-(or more)-argument form of C<open> is being used and the
2054second argument contains something else in addition to the usual
2055C<< '<' >>, C<< '>' >>, C<< '>>' >>, C<< '|' >> and their variants,
2056for example:
2057
2058=end original
2059
20603 (以上) 引数形式の C<open> が使われ、2 番目の引数に通常の
2061C<< '<' >>, C<< '>' >>, C<< '>>' >>, C<< '|' >> およびそのバリエーション
2062以外の何かが含まれている場合; 例えば:
2063
2064 open(my $fh, "<:crlf", $fn);
2065
2066=item *
2067
2068=begin original
2069
2070The two-argument form of C<binmode> is being used, for example
2071
2072=end original
2073
20742 引数形式の C<binmode> が使われている場合; 例えば
2075
2076 binmode($fh, ":encoding(utf16)");
2077
2078=back
2079
2080=begin original
2081
2082For more detailed discussion about PerlIO see L<PerlIO>;
2083for more detailed discussion about Unicode and I/O see L<perluniintro>.
2084
2085=end original
2086
2087PerlIO に関するより詳細な議論については L<PerlIO> を参照してください;
2088Unicode と I/O に関するより詳細な議論については L<perluniintro> を
2089参照してください。
2090
2091=head1 SEE ALSO
2092
2093=begin original
2094
2095The C<open> and C<sysopen> functions in perlfunc(1);
2096the system open(2), dup(2), fopen(3), and fdopen(3) manpages;
2097the POSIX documentation.
2098
2099=end original
2100
2101perlfunc(1) の C<open> 及び C<sysopen> 関数;
2102システムの open(2), dup(2), fopen(3), fdopen(3) の man ページ;
2103POSIX 文書。
2104
8672105=head1 AUTHOR and COPYRIGHT
8682106
869Copyright 2013 Tom Christiansen; now maintained by Perl5 Porters
2107Copyright 1998 Tom Christiansen.
8702108
871This documentation is free; you can redistribute it and/or modify it under
2109This documentation is free; you can redistribute it and/or modify it
872the same terms as Perl itself.
2110under the same terms as Perl itself.
8732111
2112Irrespective of its distribution, all code examples in these files are
2113hereby placed into the public domain. You are permitted and
2114encouraged to use this code in your own programs for fun or for profit
2115as you see fit. A simple comment in the code giving credit would be
2116courteous but is not required.
2117
2118=head1 HISTORY
2119
2120First release: Sat Jan 9 08:09:11 MST 1999
2121
8742122=begin meta
8752123
876Translate: SHIRAKTA Kentaro <argrath@ub32.org>
2124Translate: SHIRAKATA Kentaro <argrath@ub32.org>
877Status: completed
8782125
8792126=end meta