Perl(読み込み2)

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$

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA