Perl 入門講座も三回目です
- 第一回: Hello, world!
http://d.hatena.ne.jp/shinichiro_h/20061107#1162835826
- 第二回: コマンドラインオプション
http://d.hatena.ne.jp/shinichiro_h/20070105#1168009205
今回は Perl の組み込み関数を一部紹介します。
% perl -le '$v=x' %
これは合法な Perl コードです。 x は解釈しようが無いので、 bare word として、 "x" と同じ扱いになるわけですね。つまりこのコードは $v="x"; と同じ扱いなのです。ところが、
% perl -le '$v=y' Transliteration pattern not terminated at -e line 1. %
おやーおかしいですね。なぜこの違いが生まれるかと言うと、 sed 由来の y という組み込み関数があるからこういうことになるのです。気をつけて下さいねー。
で、次です。
% perl -le '$v=s///' # 合法 % perl -le '$v=+s///' # 合法 % perl -le '$v=-s///' # 非合法 Warning: Use of "-s" without parentheses is ambiguous at -e line 1. syntax error at -e line 1, at EOF Execution of -e aborted due to compilation errors. %
いやー不思議ですねー。今度は、シェル由来のファイルテスト演算子、 -s があるからこういうことになってしまうのです。気をつけて下さいねー。
まとめ
今日は組み込み関数のうち、 y と -s を紹介しました。
おまけコーナー
$ で終わる不思議なプログラム。
% echo | perl -nle '$;=hello; print $' hello
n や p オプションがついている場合、最後に $ で終わっていると $; に、 @ で終わっていると @; になります。いやー便利ですねー。これを NP 問題と言いません。