Perlの哲学 - Perlに対する誤解を解く

Perlのワンライナーは、awkのワンライナーの機能を参考にしたもの

Perlのワンライナーは、awkのワンライナーの機能を参考にしたものです。awkは行指向のツールで、デフォルトは、各行に対して処理するようになっています。Perlプログラミングは、行指向ではありませんが、Perlのコマンドラインオプションを使用することによって、awkの行指向のワンライナーを表現することができます。

ワンライナーを試すために、複数行のファイル「text.txt」を用意しますね。

abcd
ppp
abcppp

Perlのワンライナーの表現

Perlのワンライナーの表現です。先頭がabcの行をprintしています。各行はデフォルト引数「$_」に代入されています。

cat text.txt | perl -n -e 'if ($_ =~ /^abc/) { print $_ }'

-eは、executeのeです。引数で与えられた、Perlプログラムを実行できます。-nはlineのnです。awkと同じように、行指向で、処理をすることができます。

デフォルト引数を省略して、もう少し短く書くこともできます。

cat text.txt | perl -n -e 'if (/^abc/) { print }'

awkのワンライナーの表現

awkのワンライナーの表現です。先頭がabcの行を出力しています。Perlでは「$_」となっているところが「$0」となっています。

cat text.txt | awk '{ if ($0 ~ /^abc/) { print $0 } }'

「$0」を省略して、もう少し短くこともできます。

cat text.txt | awk '{ if (/^abc/) { print } }'

あら不思議、コマンドラインオプションと「{}」を除いて、Perlとまったく同じになりました。

Perlは、Unix/Linux利用者が、段階的に複雑なことに対応することを想定している

Perlは、汎用的なプログラミング言語ですが、ノンプログラマーがgrep,sed,awkなどのツールを使って作業をしているときに、ある複雑性を超えたタイミングで、汎用的なプログラムが必要になるということを想定しています。

Unix/Linuxのツールの利用者が、そう感じたときに、Linux/Unixコマンドから、自然に汎用的なプログラミングにシステムを成長させることができる段階的な経路を、Perlは提供しているのです。

Perlは、Unix/Linuxミドルウェアのツールボックスの中のひとつのツールとして存在していて、ユーザーが必要になったときに、使えるようになっています。