組み込み関数を活用しよう

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 問題と言いません。

なにかあれば下記メールアドレスへ。
shinichiro.hamaji _at_ gmail.com
shinichiro.h