「Perl(読み込み1)」では、ファイルをopenしてテキストの読み込みを行いましたがが、今回は標準入力から読み込みを行います。
ファイルを開いて読み込みするスクリプトと実行結果はこうでした。
takk@deb9:~/pl$ cat read.pl open(FH,"<in.txt"); while(<FH>){ print $_; } close(FH); takk@deb9:~/pl$ perl read.pl 101 102 103 104 105 takk@deb9:~/pl$
対して標準入力を読み込んで表示するスクリプトと実行結果はこうなります。
takk@deb9:~/pl$ cat stdin.pl while(<STDIN>){ print $_; } takk@deb9:~/pl$ seq 101 105 | perl stdin.pl 101 102 103 104 105 takk@deb9:~/pl$
標準入力を使う場合は、open/closeが不要になります。
標準入力のファイルハンドラは、
takk@deb9:~/pl$ cat stdin.pl while(<>){ print $_; } takk@deb9:~/pl$ seq 101 105 | perl stdin.pl 101 102 103 104 105 takk@deb9:~/pl$
さらにwhile(<>)のループを書かなくても実施してくれる-nオプションを使うとこう書けます。
takk@deb9:~/pl$ cat stdin.pl print $_; takk@deb9:~/pl$ seq 101 105 | perl -n stdin.pl 101 102 103 104 105 takk@deb9:~/pl$
さらに、デフォルト変数$_をprintする場合は、printだけで良いため、
takk@deb9:~/pl$ cat stdin.pl print; takk@deb9:~/pl$ seq 101 105 | perl -n stdin.pl 101 102 103 104 105 takk@deb9:~/pl$
さらに、printも-pで省略できます。
takk@deb9:~/pl$ cat stdin.pl takk@deb9:~/pl$ seq 101 105 | perl -p stdin.pl 101 102 103 104 105 takk@deb9:~/pl$
ここまでくるとスクリプトには何をかけばいいのか良くわからなくなるのですが、デフォルト変数$_を変更する処理を書きます。
takk@deb9:~/pl$ cat stdin.pl $_ = "PERL:" . $_; takk@deb9:~/pl$ seq 101 105 | perl -p stdin.pl PERL:101 PERL:102 PERL:103 PERL:104 PERL:105 takk@deb9:~/pl$
takk@deb9:~/pl$ cat stdin.pl $_ = $_ * 2 . "\n"; takk@deb9:~/pl$ seq 101 105 | perl -p stdin.pl 202 204 206 208 210 takk@deb9:~/pl$
コメント