say にまつわる話
Perl 5.10 から say という関数が組み込まれています。みなさんご存知ですね。セイセイセイ。
say 使ってますか?
say って超便利なんですよ。
say "foo";
これで、
print "foo\n";
と等価です。正確には、以下と等価らしいです。
{ local $\ = "\n"; print LIST }
つまり、say は \n
を書かなくても、\n
を末尾に付けてくれるうえに、print
よりもタイプ数が少なくて済むのです。これは超便利じゃないですか!
でも、みなさん、say 使ってますか?
say を使うには
なんと、say はいきなり使えないんです。say を使うには、前準備として以下のように書く必要があります。
use feature qw(say);
say 'something';
feature
を use して引数に say を渡す。。。え、面倒くさい、、、僕はただ say と書きたいだけなのに。
もう少し短く済ますなら、以下のような書き方もできます。
use 5.010;
say 'something';
use 5.010
と書けば、Perl 5.10 からの feature が有効になるので say も使えるようになる、と。
なんだそれ
say が使いたければ use feature qw(say)
するか、use 5.010
する。
そんな都合、覚えてられますか。say のために、たったの say のために。say が超絶便利に思えるほど、この事情をわずらわしく感じてしまいませんか。例えば、ちょっとしか Perl を使わない人にとっても、say の便利さは伝わりそうなのに、よっしゃ say を使うぞっとなると use feature
や 5.010 というバージョンを覚えなければいけないなんて!(正確には 5.10 以降ならなんでもいいんだけど)
Perl5.8 向け say
ついでに言うと、Perl5.10 より前のバージョンでも say が使いたい場面があるとします。
そういう場合には、自分で say 関数を実装しても良いのですが、Perl6::Say というモジュールが存在します。
え、Perl6?
そうなんです、紛らわしいのですが、Perl5.10 未満向けの say を提供するモジュールが、Perl6::Say なのです。
feature
5.10
Perl6::Say
なんだか、まじ、おれ、覚えられる自信ねーわ。。。となりません?
Say::Compat
そこで登場するのが、Say::Compat です。
このモジュールは、Perl5.10 未満で use されれば Perl6::Say をロードし、そうでなければ use feature qw(say);
してくれるモジュールです。便利ですね。やりましたね。もう Say::Compat を覚えるだけで say を使えます。
いやいやいや
でも、あるとき、say が使いたいと思ったとき、Say::Compat を思い出せますか?
今はそうですね、話の流れですから、気持ちの問題で俺は大丈夫と言う人もいれば、そうでない人もいるでしょう。でも、実際問題、しばらくぶりに say を使おうと思ったとき、Say::Compat ってすんなり出てこないと思うのです。僕は出てきませんでした。
そういうわけで、カッとなった渾身の pull request が以下です。
https://github.com/schwern/Say-Compat/pull/2
もう use say;
でいいじゃんという身も蓋もない感じです。
use say;
say "OK!";
L と組み合わせれば、久方ぶりに Perl のワンライナーを書いても、
perl -ML -e 'say "easy!"'
これで OK なわけです。use say; なら覚えるもなにもないでしょう!
しかし、マージされるかは微妙だという自覚はありますw
穏便に
というわけで、
alias perl='perl -M5.010'
とか思い直しかけてもいますが rcfile に毎度書くのも面倒だなあと思っている次第。say が普通に CORE に入る日って来るんでしょうか。
セイセイセイ。