-2

エクスポートはPerlスクリプトでは使用できないため、環境変数を使用しました。

このコードはエラーを返しませんがperl -c、.pmファイルの構文をチェックするコマンドは出力を出力しません。

myscript.pl

$ENV{'PATH'}='C:/Users/abc/Desktop/mno/wwwww/scripts/lib/perl/';

system("perl -c ContentModifySeasonPassOverlayRecord.pm");
4

3 に答える 3

1

あなたが何をしたいのか、もう一度推測させてください:

おそらくcronjobで、すべてのPerlモジュールの構文チェックをバッチ処理したいと考えています。そのために使用しているスクリプトは、作業ディレクトリ (フレームワークがある場所) の外のどこかにあります。チェックしたいスクリプトも別の場所にあります。

あなたがする必要があるperl -cのは、実行中のスクリプトの作業ディレクトリに lib ファイルがあるように、lib (フレームワーク) がある場所からコマンドを実行することです。呼び出しを行う前に作業ディレクトリを変更する必要があり、呼び出しにスクリプトへのフル パスを含めるperl -c必要があります。

#!/usr/bin/perl
use strict; use warnings;
# Change current working directory to where the framework is
chdir('/home/user/Desktop/QWARTS-0.6/autoinfra/lib/perl/');

# Run the perl -c command for each of your scripts you want to check
foreach my $script (qw(ContentModifySeasonPassOverlayRecord.pm otherfiles.pm)) {
  system("perl -c /path/to/your/scripts/$script");
}
于 2012-09-11T09:47:06.517 に答える
0
#!/usr/bin/perl
use warnings;
use strict;
system("perl -c /root/.cpan/build/DateTime-TimeZone-1.31-oqQt_7/lib/DateTime/TimeZone/America/Noronha.pm");

私はそれがどのように機能しないのかわかりませんか?

# ./errr.pl 
/root/.cpan/build/DateTime-TimeZone-1.31-oqQt_7/lib/DateTime/TimeZone/America/Noronha.pm syntax OK
于 2012-09-11T07:19:25.763 に答える
0

perl スクリプトを使用して perl スクリプトを実行する間違った方法を実行していると思います。ここでは、perl スクリプトを使用して perl スクリプトを実行する正しい方法を示します。

use strict;
use warnings;
use IPC::System::Simple qw(system capture);

 # Run a command, wait until it finishes, and make sure it works.
 # Output from this program goes directly to STDOUT, and it can take input
 # from your STDIN if required.
 system($^X, "yourscript.pl", @ARGS);

 # Run a command, wait until it finishes, and make sure it works.
 # The output of this command is captured into $results.
 my $results = capture($^X, "yourscript.pl", @ARGS);

モジュールのエラーをチェックするには、perl スクリプトでモジュールを「使用」し、通常の方法でスクリプトを実行します。エラーがある場合は、stdout にスローされます。

多数の perl モジュールをテストしたい場合は、その目的のためにシェル スクリプトを作成できます。

#!/bin/sh
// List all modules 
MODULES="Data::Dumper Foobar::Test"

for i in $MODULES ; do
if $(perl -M$i -e '1;' >/dev/null 2>&1 ); do
echo "Ok."
else
echo "No." 
fi
done
于 2012-09-11T07:22:14.473 に答える