2010-09-13
Re: Perlスクリプトの一行目には何と書くべきなのか
もしCPAN形式でスクリプトを配布するなら、それは#!/usr/bin/perlないし#!perlとするべきで、env(1)を使うべきではないと思います。
CPAN形式のディストリビューションでは、インストールするスクリプトのshebang行をインストール直前に修正し、正しいパスに書き換えてくれます。ただし、このルーチン*1はいまのところenv(1)を認識してくれません。つまり、env(1)を使った場合、インストールに使用したperlと実際に実行されるperlが一致するとは限りません。perlを一つしかインストールしていないシステムなら、これでも問題なく動きます。しかし最近では、システムにインストールしてあるperlには触らず、アプリケーション用のperlを別途perlbrewなどでインストールしてそちらを使うということもよく行われるようになりました*2。このような状況下では、env(1)を指定したスクリプトはうまく動かない可能性があります。したがって、CPAN形式で配布するスクリプトではenv(1)を使うべきではありません。ちなみに、前述のperlbrewやcpanmといったスクリプトでは単に#!perlと書いているようです。
もちろん、CPAN形式でないようなもの、たとえばユーザーが手動でインストールするCGIスクリプトなどではこの限りでありません。おそらくその場合は、元のエントリにあるように、env(1)を使ったほうがポータブルになり、トラブルも少ないのでしょう。
*1:ExtUtils::MM_Unix->fixin()メソッド
トラックバック - http://d.hatena.ne.jp/gfx/20100913/1284377014
リンク元
- 149 http://reader.livedoor.com/reader/
- 124 http://b.hatena.ne.jp/hotentry/it
- 123 http://b.hatena.ne.jp/
- 116 http://b.hatena.ne.jp/hotentry
- 95 http://d.hatena.ne.jp/nkmrgk/20100913/1284374138
- 90 http://d.hatena.ne.jp/
- 71 http://twitter.com/
- 58 http://b.hatena.ne.jp/entrylist
- 43 http://pipes.yahoo.com/pipes/pipe.info?_id=5c907cb540262d4c8498a3d79261441b
- 40 http://www.ig.gmodules.com/gadgets/ifr?exp_rpc_js=1&exp_track_js=1&v=fffbf927a01c1573ec0acdcadfbfe574&container=ig&view=default&lang=ja&url=http://www.hatena.ne.jp/tools/gadget/bookmark/bookmark_gadget.xml&country=JP&parent=http://www.google


