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_4

Perl ディレクトリ操作 03 glob ダイヤモンド演算子 概要 (0x226)

Perl ディレクトリ操作 03 glob ダイヤモンド演算子 概要 (0x226)

目次 - Perl Index



Theme



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

Perl で ディレクトリからファイル名を取得する演算子「 glob 」の代わりにダイヤモンド演算子「 < > 」を利用する方法を確認する。今回は「 <> 」の概要を改めて確認する。



ダイヤモンド演算子



ダイヤモンド演算子 ( 別名: 山カッコ )「 < > 」は、「 Perl 「 ファイルハンドル 」: ダイヤモンド演算子と print, printf (0x4a) 」で確認したように、ファイルハンドルからファイルを読み込むことも可能です。

これから確認するのは、このダイヤモンド演算子を「 グロブ 」として利用する方法ですが、ここではダイヤモンド演算子の概要を改めて確認します。


「 < > 」の概要



perlop - perldoc.jp では、ダイヤモンド演算子は「 ヌルファイルハンドル 」と呼ばれています。

曰く、
ヌルファイルハンドル <> は特別で、sed や awk および、ファイル名の リストを取って、それら全てからの入力の各行に同じことをするような その他の Unix フィルタプログラムをエミュレートするために使われます。

とのことです。

「 <> 」からの入力は、通常標準入力「 STDIN 」かコマンドラインの起動引数が設定されています。

「 <> 」では、始めに配列「 @ARGV 」が調べられます。「 @ARGV 」は起動引数のリストが格納される特別な配列で、「 <> 」が「 @ARGV 」を調べることも含めて (0x3b) で確認しました。

「 @ARGV 」が空の場合は、「 $ARGV[0] 」に「 - 」( Hyphen ) がセットされます。「 - 」は、標準入力「 STDIN 」からの入力を受付けます。


処理の概要



こうした「 <> 」の動作を疑似的なコードで書くと次のようになるそうです。


# @ARGV が空なら配列の先頭に「 - 」を追加
unshift(@ARGV, '-') unless @ARGV;

# @ARGV から shift で値を取り出しつつループ
while ($ARGV = shift) {
# $ARGV の値をファイルハンドル ARGV として open
open(ARGV, $ARGV);
# ファイルハンドル ARGV を <> で読み込みながらループして処理
while(<ARGV>) {
# 各行の処理をするコード
...
}
}



実際に「 <> 」は内部的にファイルハンドル「 ARGV 」を利用しているので「 <> 」と「 <ARGV> 」は同義語だとのことです。

ただし、上記の疑似コードのように「 <ARGV> 」を利用してもうまく動作はしないそうです。

「 <> 」を含めて Perl で利用する I/O 関連の演算子は perlop "I/O 演算子 " - perdoc.jp を読み込むと良さそうです。


0x226 -> 0x227 へ



次回は、ダイヤモンド演算子 ( ヌルファイルハンドル )「 <> 」を実際にグロブとして利用する方法を確認します。


参考情報は書籍「 初めての 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 ▲