コマンドラインスイッチと特殊変数を使いまくる

ファイルの奇数行だけを表示したいといったときに、例えばどんなコードを書くでしょうか。

例えば、以下のように書く事ができます。


    #!/usr/bin/env perl -w
    use strict;
    my $lines = 0;
    while(<>) {
        $lines++;
        print $_ if $lines % 2;
    }

ただ、こういう小さい物にスクリプトを作るのも面倒ですし、1ライナーで書きたいと思いませんか?

Perlには数多くのコマンドラインスイッチや特殊変数があり、それを使うととても短く書く事ができます。

例えば、この例では以下の物を使うと1ライナーで書けるくらいの短さになります。


    $. - 現在の行番号
    -n - プログラムのループ

まず $.を使ってみましょう。line変数が不要になるので以下のようになります。


    #!/usr/bin/env perl
    use strict;
    while(<>) {
        print $_ if $. % 2;
    }

続いて-nオプションを使ってみましょう。ループが不要になるので、以下のように書けます。


    #!/usr/bin/env perl -wn
    print $_ if $. % 2;

これだったら1ライナーで書きたいと思えますよね。

1ライナーで書くと、-e スクリプト評価のコマンドラインスイッチを使って以下のようになりますね。


    perl -wn -e 'print $_ if $. % 2' words.txt 

コマンドラインスイッチは、perldoc perlrunで調べられます。

他にも便利なコマンドラインスイッチや特殊変数があるので、是非読んでみてください

次は yusukebe さん。