ダイヤモンド演算子
2019/02/14更新
目次
ダイヤモンド演算子とは
Perlでファイル入出力を行なう際に使用する行入力演算子「<~>
」は、通常、間に対象のファイルハンドルを挟むが、ファイルハンドルを挟まない空の行入力演算子「<>
」のことを通称ダイヤモンド演算子という。
ダイヤモンド演算子は、標準入力を読み取れるので、標準入力<STDIN>
の単なる省略形と思われがちであるが、そうではない。<STDIN>
は純粋に標準入力だけであるが、<>
は標準入力に加えて実行時引数で与えたファイルの中身も読み取ることができる。
ダイヤモンド演算子の使い方
例として、fileA.txt
の中身をfileA
、fileB.txt
の中身をfileB
とする。また、sample.pl
を以下の通りとする。
# sample.pl while (<>) { print; }
引数にファイルを与えると、その中身を受け取ることができる。
perl sample.pl fileA.txt # 「fileA」が出力される。
複数のファイルを与えると、順番に受け取ることができる。
perl sample.pl fileA.txt fileB.txt # 「fileA fileB」が出力される。
標準入力のみを与えた場合は、標準入力を受け取る。
echo "stdin" | perl sample.pl # 「stdin」が出力される。
標準入力と引数を両方与えると、引数のファイルの中身だけを受け取る。
echo "stdin" | perl sample.pl fileA.txt fileB.txt # 「fileA fileB」が出力される。
引数として「
-
」を与えると、その部分は標準入力から受け取る。echo "stdin" | perl sample.pl fileA.txt - fileB.txt # 「fileA stdin fileB」が出力される。
ダイヤモンド演算子を使うことで、Linuxコマンドのように、引数でファイルを与えても、パイプで標準入力を渡しても同じように動作するプログラムを簡単に作ることができる。