blog20100901

2013/08/20 - プログラミング言語 Perl にまつわる etc. - Perl monger
参考 : perldoc, perldoc.jp, search.cpan.org, perldoc.perl.org ...
「 初めての Perl 第 6 版 」(オライリー・ジャパン発行 ISBN978-4-87311-567-2) 」
「 続・初めての Perl 改訂版 」(オライリー・ジャパン発行 ISBN4-87311-305-9) 」
「 Effective Perl 第 2 版 」(翔泳社発行 ISBN978-4-7981-3981-4) 」 ... etc,.

Perl Perl_0

Perl 「 ファイルハンドル 」: STD シリーズ補足 (0x42)

Perl 「 ファイルハンドル 」: STD シリーズ補足 (0x42)

目次 - Perl Index



Theme



Perl について、復習を兼ねて断片的な情報を掲載して行く連載その 0x42 回。

Perl の特別なファイルハンドル「 STD シリーズ 」(STDIN, STDOUT, STDERR) についての補足。




STDIN の補足



標準入力ストリーム ( STanDard INput stream ) を意味する「 STDIN 」は、通常ユーザのキーボードを入力元に設定されていますが、Unix のシェルの機能を使えば、簡単に入力元を変更出来ます。

Unix のシェルの力を借りてコネクションを操作出来るのは「 STDOUT 」と「 STDERR 」も同じです。

なぜなら、これらの標準設定が、元々システム ( Unix の標準 I/O ライブラリ : 近代的のほとんどのオペレーティングシステムもこれに準じている ) に由来するからです。

「 STDIN 」の場合は次の様にして入力元を変更することが出来ます。

次の例では、Perl プログラム「 program 」を実行する際に、「 < 」を使ったリダイレクトによって、ファイル「 inputfile 」を入力ソースにしています。

これにより、プログラム内で「 STDIN 」を指定した文では、「 inputfile 」の内容が読み込まれます。


$ ./program < inputfile


Perl プログラム「 program 」が、次の様なコードだった場合は、ファイル「 inputfile 」の内容を 1 行ずつ標準出力へ出力します。


while (<STDIN>) {
print $_;
}


ちなみに、上の例と次の例は同じ動きをします。


while (<>) {
print;
}


「 | 」( パイプ ) を使った値の受け渡しにも対応しています。


$ cat inputfile | ./program


この例では、コマンド cat の出力を Perl プログラムにパイプで渡しています。その結果は先のリダイレクトを使った場合と同じものになります。

STDOUT と STDERR の補足



「 STDOUT 」は、標準出力ストリーム ( STanDard OUTput ) を意味します。これは通常あなたのディスプレイを指し示します。

「 STDERR 」は、標準エラー出力ストリーム ( STnDard ERRor ) を意味します。これも通常はあなたのディスプレイを指し示していますが、それはエラーにまつわる情報を出力します。

「 STDOUT 」で、例えば次の様にした場合は、Perl プログラム「 program 」の出力をファイル「 outputfile 」に書き込むことが出来ます。

「 > 」を「 >> 」に代えれば、上書きせずに追加で書き込むことも出来ます。


$ ./program > outputfile


「 program 」の中身は例えばこんな感じです。


print "Hello, STDOUT\n";


これで、「 outputfile 」には改行付きの文字列「 Hello, STDOUT 」が書き込まれます。

「 STDIN 」と違い、コードの中には「 STDOUT 」の文字がありません。なぜなら、print 文自体が「 STDOUT 」とのコネクションを持っているからです。

「 STDERR 」の動作も確認しましょう。

基本的には「 STDOUT 」と同じですが、その中身はエラーです。

例えば、次の様なコードを書いて実行すると「 Use of uninitialized value in print at program line n. 」と言ったエラーが表示されます。


print;


これを次の様にして実行してみましょう。

ここでは、手元のシェルが「 tcsh 」なので「 >& 」というリダイレクトにしています。「 bash 」の系統を使っている場合は「 2> 」を使ってください。


$ ./program >& outputfile


ファイル「 outputfile 」には、「 Use of uninitialized value in print at program line n. 」が書き込まれます。

0x42 -> 0x43 へ



今回は、Unix 系のオペレーションシステムでお馴染みの「 シェル 」( Shell ) に関する内容がいくつか出てきました。

「 シェル 」はいわゆる「 コマンドラインインターフェイス 」( Command Line Interface ) というやつです。

Perl コメントアウトと #! (0x0a) 」で少し紹介しましたが、一口に「 シェル 」と言っても複数種類があります。

僕は、レンタルサーバ Drive Network のシステム ( Free BSD ) 上で勉強しているので、このサービスが標準で提供している「 tcsh ( (TENEX | TOPS-20) C Shell ) 」をもっぱら利用しています。

各種シェルは多くの共通点を持ちますが、多くの相違点もありますので、それぞれの流儀にしたがって、好みのシェルを使っている様です。


参考情報は書籍「 初めての Perl 第 6 版 」を中心に perldoc, Wikipedia および各 Web サイト。それと詳しい先輩。

目次 - Perl Index





















同じカテゴリー(Perl)の記事
 Perl mp2 翻訳 Web コンテンツ圧縮の FAQ (d228) (2023-10-11 23:49)
 Perl mp2 翻訳 既知のブラウザのバグの回避策をいくつか (d227) (2023-05-26 15:41)
 Perl mp2 翻訳 Perl と Apache でのキュートなトリック (d226) (2023-05-19 17:05)
 Perl mp2 翻訳 テンプレートシステムの選択 (d225) (2022-08-15 22:23)
 Perl mp2 翻訳 大規模 E コマースサイトの構築 (d224) (2022-06-15 20:43)
 Perl mp2 翻訳 チュートリアル (d223) (2022-06-15 20:42)
上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。

Llama
リャマ
TI-DA
てぃーだブログ
プロフィール
セラ (perlackline)
セラ (perlackline)
QRコード
QRCODE
オーナーへメッセージ

PAGE TOP ▲