tsucchi’s diary(元はてなダイアリー)

はてなダイアリー(d.hatena.ne.jp/tsucchi1022)から移行したものです

Perl の shebang 解析の謎

(2011/08/19 追記あり)

たとえば、こんなシェルスクリプトを作ってみて、

tsucchi@independent[102]% cat a.sh
#!/bin/sh

echo "aaa";

で、sh ではなく、Perl で実行してみます。

tsucchi@independent[103]% perl a.sh
aaa

すると、ふつうにシェルスクリプトとして、実行されます。

perl -cw つけたり、B::Deparse をかけようとすると、Perl として解釈されるっぽいです。

perl コマンドのオプションのつけ方にもよるのかもしれませんが、コンパイルよりも早い段階で、シェルとして解析されているっぽいですねー。ソース読まないと細かいことは分からないですが、こんなののために Perl のソース読むのか???

とりあえず、日本語 perldoc みても、この挙動は書いてなかったし、なんか古い perl の機能の残骸っぽい気がするけど、よくわかんないし、困ってないので放置することにします。

2011/08/19 追記

ブクマコメより、id:kits さんに教えていただきました。

perlrun 「#! 行に "perl" という語が含まれていなければ、#! の後に指定された プログラムが Perl インタプリタの代わりに実行されます」
http://perldoc.jp/docs/perl/5.10.0/perlrun.pod

つーかオイラは、perldoc の何を読んでたんだ orz。たぶん、「Perl インタプリタの代わりに」を完全に読み飛ばしてたなー orz