Perl はバイナリファイルを「実行」できません。

Perl はバイナリファイルを「実行」できません。

新しいDebinをインストールすると、Perlソルバーはデフォルトでインストールされます(つまり、他のPerlパッケージはまだありません)。ただし、次のことを試してください。

$ls
a.cpp b.cpp
$ perl -e 'system "g++ -o a.out a.cpp b.cpp"; exec "a.out"'

出力がありません(エラーなし、なし)。 Perlはコマンドを正しく使用しますsystem(つまりa.out実行可能ファイルを生成します)、分岐できません。なぜ?

答え1

答えは嘘です出荷書類ビーチexecしかし、自分が探しているものがわからないと確認するのは難しいです。

LISTに複数のパラメータがある場合、execvが呼び出されます。(3)LISTのパラメータを使用してください。 LISTに要素が1つしかない場合は、引数にシェルメタ文字が含まれていることを確認します。そうであれば、引数全体が解析(...)のためにシステムのコマンドシェルに渡されます。引数にシェルメタ文字がない場合は、単語に分割され、execvに直接渡されます。(…)。

すべての場合において、コマンド名は(Perlまたはシェルを介して)パスルックアップのターゲットです。その名前が含まれていない場合は、通常、現在のディレクトリを含まない/コマンド検索パス()で検索されます。$PATH

に変更

exec "./a.out"

答え2

...しかし、フォークすることはできません。

execまったく分岐せずに、現在実行中のアプリケーションコード(Perlなど)を新しいコード(a.out)に置き換えます。

それ以外に、どの出力が予想されるのかは不明ですa.out。つまり、問題はperla.outではなくperlにある可能性があります。

環境変数が明示的に含まれていないため、システムはa.outローカルディレクトリ内のバイナリをまったく見つけることができません。これを強制するには、代わりに行います。PATH.exec "./a.out"

関連情報