6

これは、 「自分のシステム コールが pp でラップした Perl プログラムで動作しないのはなぜですか?」という無関係な問題を切り抜けようとする私の試みです。 Linux システムで簡単な Perl スクリプトを作成しました。

new-net:~/scripts # cat ls_test.pl
@ls_out = `ls -l`;

map { print "$_\n" } @ls_out;

$out = `sh out_test.sh`;

print "$out\n";

このスクリプトは、単純なシェル ファイルを呼び出します。

new-net:~/scripts # cat out_test.sh
echo "I'm here"

pp を使用して、Perl スクリプトとシェル スクリプトを ls_test にパックしました。

new-net:~/test # unzip -l ls_test
アーカイブ: ls_test
  長さ 日付 時間 名前
 -------- ---- ---- ----
        0 07-13-09 16:41 スクリプト/
      436 07-13-09 16:41 マニフェスト
      214 07-13-09 16:41 META.yml
       93 07-13-09 16:41 スクリプト/ls_test.pl
      538 07-13-09 16:41 スクリプト/main.pl
       16 07-13-09 16:20 out_test.sh
 -------- -------
     1297 6 ファイル

パックされたファイルを空のディレクトリで実行すると、シェル スクリプトが見つかりません。

new-net:~/test # ./ls_test
合計 3391

-rwxr-xr-x 1 ルート ルート 3466177 7 月 13 日 16:41 ls_test

sh: out_test.sh: そのようなファイルまたはディレクトリはありません

シェル スクリプトをディレクトリにコピーすると、パックされたスクリプトが期待どおりに実行されます。

new-net:~/test # ./ls_test
合計 3395 -rwxr-xr-x 1 ルート ルート 3466177 7 月 13 日 16:41 ls_test -rw-r--r-- 1 ルート root 16 Jul 13 16:20 out_test.sh 私はここにいます

では、ppパックされたスクリプトはインクルード ファイルをどこで見つけることができるのでしょうか? また、そのインクルード ファイルへの呼び出しは、元の Perl スクリプトでどのように構成する必要がありますか?

4

3 に答える 3

3

これが私のシステムで機能したものです:

C:\tmp> cat build.bat
@エコーオフ
mkdir 出力
pp -o runner.exe runner.pl -a sayhello.bat を呼び出します
runner.exe 出力を移動\runner.exe
C:\tmp> 猫 sayhello.bat
@echoこんにちはと言っています...

C:\tmp> cat runner.pl
#!/usr/bin/perl

use strict;
use warnings;

use File::Spec::Functions qw( catfile );

my $prog_path = catfile $ENV{PAR_TEMP}, inc => 'sayhello.bat';

my $output = `$prog_path`;

print "The output was: >>> $output <<< ";

__END__

出力:

C:\tmp\output> runner.exe
The output was: >>> I am saying hello ...
<<<

ただ、これはちょっと汚い気がします。

于 2009-07-14T18:08:31.553 に答える