# say にまつわる話 {{tag: perl, cpan}} 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 関数を実装しても良いのですが、{{cpan: Perl6::Say}} というモジュールが存在します。 え、Perl6? そうなんです、紛らわしいのですが、Perl5.10 未満向けの say を提供するモジュールが、Perl6::Say なのです。 `feature` `5.10` `Perl6::Say` なんだか、まじ、おれ、覚えられる自信ねーわ。。。となりません? ## Say::Compat そこで登場するのが、{{cpan: Say::Compat}} です。 このモジュールは、Perl5.10 未満で use されれば Perl6::Say をロードし、そうでなければ `use feature qw(say);` してくれるモジュールです。便利ですね。やりましたね。もう Say::Compat を覚えるだけで say を使えます。 ## いやいやいや でも、あるとき、say が使いたいと思ったとき、Say::Compat を思い出せますか? 今はそうですね、話の流れですから、気持ちの問題で俺は大丈夫と言う人もいれば、そうでない人もいるでしょう。でも、実際問題、しばらくぶりに say を使おうと思ったとき、Say::Compat ってすんなり出てこないと思うのです。僕は出てきませんでした。 そういうわけで、カッとなった渾身の pull request が以下です。 もう `use say;` でいいじゃんという身も蓋もない感じです。 use say; say "OK!"; {{cpan: L}} と組み合わせれば、久方ぶりに Perl のワンライナーを書いても、 perl -ML -e 'say "easy!"' これで OK なわけです。use say; なら覚えるもなにもないでしょう! しかし、マージされるかは微妙だという自覚はありますw ## 穏便に というわけで、 alias perl='perl -M5.010' とか思い直しかけてもいますが rcfile に毎度書くのも面倒だなあと思っている次第。say が普通に CORE に入る日って来るんでしょうか。 セイセイセイ。