- 2006-05-19 (金)
- Perl
Pocket詳解 Perl/CGI辞典 - WINGSプロジェクト 土井 毅 著, 山田 祥寛 (監修)
仕事の息抜きに、会社の先輩が持っていた Perl リファレンス本を何気なく手にして読み始めたものの、とても賛同しがたい記述を発見してショックを受けました。ちなみに初版発行日が 2006年5月5日 の、最近書かれた本です。
p.32
[参考] 他のプログラミング言語では、変数宣言は宣言に含まれることが多いですが、Perlには変数宣言という概念がありません。Perlは変数が最初に評価された時点で領域を確保します。Perlと他のプログラミング言語で大きく異なるのがこの変数宣言機能の有無であり、見通しの悪い複雑なスクリプトを書いてしまう主因でもあります。
最初のイントロダクションの章でそんな風に書かれています。これを読んだプログラミング初心者の人達はきっと「えぇ?そうなの?Perl使いにくそうだなあ」と思ってしまいますよね、きっと。そしてさらには・・・
p.104
strict プラグマは、Perlスクリプトでの記法を厳密にするためのプラグマです。 (中略) これにより、宣言の曖昧な変数への参照を発見できます。
[参考] strict プラグマは厳密すぎるため、通常のプログラミングではあまり使用しません。
... orz
Perl言語をこれから使おうとして、この本を手に取っている人達に対して strictプラグマ を「あまり使いません」と切って捨てちゃ駄目だと思う (悲)。
Perlビギナーの皆様へ - 何を書くにもまず 'use strict'
strict is your friend!!!!!
strict プラグマこそが、我々のミスを見つけてくれる、プログラマーの強力な味方です。「見通しの悪い複雑なスクリプト」を書いてしまう事への懸念は、すべてこの strict プラグマが晴らしてくれます。どんなにコードを書くときにも、かならずコードの先頭で、
use strict;
と書いておきましょう。そして、変数を作る際は、
my $hoge = 1;
というように、「スコープ (関数) 内でのみ有効な変数宣言」 をつけましょう。こうすることで、少なくとも僕は後悔した事はありません。幾度となく、助けてもらった思い出ばかりです。
※さらには 'use diagnostics' とかしておくと、何をどうすればエラーが直るのかのヒントを教えてくれるので good だったりします。
と、ここで書いても・・・
きっとそれなりの理由があって、'use strict' 使うな、と書いたのでしょうけど、一応、著者の方々にも伝えてみました。
書店に行くと Perl/CGI 関係の書籍は大量にありますが、その多くが未だに 'perl 4対応' だったり、 'jcode.pl について' とかだったり、utf8 flag や 'use encoding' について触れていなかったり... あまりにも内容が古すぎて、寂しい気持ちになります。こんなに自由で奥の深い、楽しい言語なのに・・・もっとみんなに好きになってほしい・・・みたいな。
ならば自分で書くか?と。時間作って、理想の章立て考えた上で出版社の人に・・・てか、書けるのか俺?/w いや、僕が一人で書くのではなくて、ここは Perl 好きなみんなの力を合わせて、共同で「Perl はこんなに便利だよ・楽しいよ」的な初級 - 中級レベルの本を執筆してみませんか?
ちょっと判ってきた (05/22追記)
いろんな方の反応を読んでいたら、なんとなくこの本のターゲット層が見えてきました。Perl言語を利用する人達で多いのが
- 仕事として、Perlを使ってシステム開発する人
- 趣味として、Perlを使って自分のWEBサイトを作る人
だとして。この本は後者の人達を相手にしている本なのかぁ、なんて事を、このお二方のコメントを読んで思いました:
著者 土井さん - 原文リンク
確かに「通常は使用しません」というコラムはこれからPerlに触れる人に悪影響を及ぼしますね。strictモジュールのPODドキュメント中の"but is sometimes too strict for casual programming."(意訳:カジュアルプログラミングにはちょっと厳しすぎることがあるかもしれない)というニュアンスを伝えようとしていたのですが、かえってずれてしまったようです。
お気楽極楽ブログさん - 原文リンク
プログラマな世界では、naoyaさんやDanさんの意見で間違いないと思う。
use strict;した方が、生産的にゴリゴリコードを書けると思う。
ただ、真性の( 初 | 中 )級者は、use strict; の前に覚えることがたくさんあるとも思う。
なるほど、どんな人でも、気軽にレンタルサーバ上とかでスクリプト作れちゃうのも、またPerlの良いとこなのかなぁ、と。だからこそ、この本を始め、多くのPerl本のタイトルが「Perl/CGI辞典」とか「PerlでCGI?」とかなんですね。'use strict' しちゃうと、エラーで怒られるんだけど、どうやって直せばいいかが判らない。で、結局 strict 宣言自体をはずす事で済ませちゃってる人達もいるんだよ、と。まぁ、そう、かなぁ・・・うーん。
僕はこの人達に 'use strict' 啓蒙がしたいのでは決してなくて、本意・想いは 仕事としてシステム開発する人達に最適な Perl 入門本があったらいいな。そしてその中ではきちんと use strict を推奨・解説したいな、でした。こうやっていろんな反応があって、初めて自分の気持ちが理解できた、良い体験でした。反応してくれた皆さんに感謝したいと思います。
but still, 'use strict' will bring happiness to everyone. that's for sure :)
関連情報
- perldoc strict (perl公式な strict プラグマのドキュメント)
- 404 Blog Not Found - perl - use strict; # and be happy
appreciate your friendliness, 弾さん♪書籍企画も楽しみにしています - NDO::Weblog - Perl の変数に関するちょっとした誤解と、動的な性質について
良いまとめ記事 (素晴らしい)。でも仕事Perlな人以外は前半部分だけで止めておくべし /w - naoyaのはてなダイアリー - Perl の話をまとめた
- ぱるも日記 strict プラグマ
- spiritlooseのはてなダイアリー - Perlの use strict
仕事としてPerlを使う:
- Walrus, Visit. なぜ「業務にPerlは使えない」のか?
- Newer: 生きがいの創造2 - すべての答えは『バランス』という言葉の中にある
- Older: アルケミスト - 心に残ったメッセージ