2011-12-07 3 views
2

から読む<>は何からPerlで読むのですか?たとえば、次のことは何でしょうか?Perl:<>

print for(<>); 

答えて

8

いわゆるダイヤモンド演算子(<>)は、STDINまたはコマンドライン引数として指定されたファイル名から行単位(スカラーコンテキストで)を読み込みます。 perldoc perlopから

ヌルファイルハンドル<>は特別です:SEDやAWKの 動作をエミュレートするために使用することができます。 <>からの入力は、標準入力 から、またはコマンドラインにリストされている各ファイルから入力します。最初に<>が評価され、@ARGV配列がチェックされます。 が"-"に設定されています。 に標準入力があります。 @ARGV配列は、ファイル名のリストとして として処理されます。リスト内の要素として格納された各ラインで、すべての行を返す<>リストコンテキストにおいて


つまり、print for <>;は、メモリが増えてもprint while <>;と同じことを行います。

+0

ここにいくつかの情報があります:http://perldoc.perl.org/perlopentut.html#Filters – TLP

0

これは、標準入力から一度に1つの行を読み取り、$_にそれを格納します。 printは引数が与えられていないので、デフォルトで$_を出力します。このプログラムは標準入力から読み込み、EOFに達するまで標準出力にエコーします。

+0

'$ .'?私はあなたが '$ _'を意味したと思います – Zaid

+0

私はしました。何らかの理由でスタックオーバーフローがアンダースコアを起こしました。 – Dan

3

あなたはPerlの最も魔法の作品を見つけました。まあ、私は確信しているより多くの魔法のものが、この小さなイディオムはそれを作る非常にシェルパイプラインの使用のためのプログラムを書くのが簡単ファイル操作使用。

引数を指定せずに実行すると、<>は標準入力から1行ずつ読み込みます。

引数を指定して実行すると、指定されたファイルから順に引数をファイル名と読み込み行として1つずつ処理します。

短いデモ:私はそこに手でプログラムに入力された

$ cat > print.pl 
#!/usr/bin/perl -w 
print for(<>); 
$ chmod 755 print.pl 
$ echo hello world | ./print.pl 
hello world 
$ ./print.pl print.pl 
#!/usr/bin/perl -w 
print for(<>); 
$ ./print.pl print.pl print.pl 
#!/usr/bin/perl -w 
print for(<>); 
#!/usr/bin/perl -w 
print for(<>); 
$ 

。あなたが完全にそれを入力したときに^Dを押す。

関連する問題