2016/04/21

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 に入る日って来るんでしょうか。

セイセイセイ。

サイト内検索