1

スクリプトが Windows および UNIX システムで動作するようにしたいので、いくつかのコードを吹き飛ばしたいです (単なるサンプルであり、機能しません)。

if $^O eq 'MSWin32' {
#!/c:/perl/bin/perl.exe
}
else { / non-windows system
#!/usr/local/bin/perl
}

perlでこれを行う方法はありますか? #のようです!行はperlスクリプトの最初の行でなければならないので、これは不可能ですか?

4

3 に答える 3

4

シバン ( #!/path/to/interpreter) は、UNIX ライクなシステムでのみ使用されます。そして、それは最初の行でなければなりません。.plWindows システムでは、シバンは使用されず、代わりにファイル末尾の関連付けが使用される場合があります。ファイル末尾を perl インタープリターに関連付けることができます。

シバンのコマンド ライン スイッチは、プラットフォームに関係なく、perl インタープリターによって解釈されます。

すべてのプラットフォームで perl スクリプトを起動する安全な方法は、実際にperlコマンドを使用することです。Perl のインストールが成功した場合に利用可能になります。たとえばperl myscript.pl、の代わりに./myscript.pl。2 番目のオプションでは、ファイルが *nix システムで「実行可能」に設定されている必要があります。

于 2012-09-28T07:31:36.013 に答える
4

#!は、ファイルの最初の 2 文字である必要があります。これは、カーネルがファイルを起動しようとするときに検索する場所だからです。これらは OS のディレクティブ (シバン行と呼ばれます) の一部であり、OS は Perl について何も知りません。

標準の Perl インストーラー (ExtUtils::MakeMaker など) を使用してスクリプトをインストールする場合は、それを使用するだけ#!perlで、インストーラーが既存の#!行をシステムに合わせて調整します。

于 2012-09-28T08:02:17.357 に答える
2

不可能です。「#!」ファイルの実行方法を決定するために、Unix 関数の exec*() ファミリによって参照されます。したがって、そこでスクリプトを作成することはできません。

とにかく、Windows コマンド プロンプト (または CreateProc() 関数ですが、バッチ ファイルの起動に使用できるかどうかはわかりません) は #! を検索しないため、それほど有用ではありません。

于 2012-09-28T07:30:39.780 に答える