shまたはperlを介してperlスクリプトを呼び出すことの違いは何ですか

shまたはperlを介してperlスクリプトを呼び出すことの違いは何ですか

簡単なHello World Perlスクリプトがあります。

#!/usr/bin/perl

print 'Hello world.';

を介して実行すると正常に動作しますが、経由perl <file_name>で実行すると失敗しますsh <file_name>

最初の行の私の理解は、Perlシェルを呼び出すことです(#!/ usr / bin / bashがbashシェルを呼び出す方法と似ています)。それでは、これら2つのコマンドの違いは何ですか?

このスレッドを見つけました。http://ubuntuforums.org/showthread.php?t=1133334「この場合、Perlをまったく実行せずに 'print'プログラムを呼び出すシェルを実行しているのsh <file_name> です。」もしそうなら#!それでは、まだ必要ですか?

(ファイルをchmod + xして直接実行できることを知っていますが、私が使用した2つの方法の違いを知りたいのですが。)

ベストアンサー1

ファイルを直接実行すると

/path/to/script/filename

shebang行を実行するために通訳を検索します。引数を使用してまたはperlを実行すると、文書化されたshとおりに実行されます。つまり、ファイルをそれぞれPerlまたはシェルのスクリプトとして解釈しようとします。

コマンドライン(たとえばsh foo.pl、またはperl foo.pl)で明示的にインタプリタを設定すると、実行するインタプリタを決定するためにshebang行は使用されません。それはい可能なオプションは解析されますが、例えばshebangを使用して#!/usr/bin/perl -wスクリプトを実行するとフラグが有効になるなど、スクリプトを解釈する必要があるperl foo.plプログラム-wを決定するためには使用されません。

したがって、Perlスクリプトを実行するとは、Perl Shebang行にもかかわらず、システムがそれをスクリプトsh foo.plとして解釈しようとすることを意味します。sh

おすすめ記事