エクスポートはPerlスクリプトでは使用できないため、環境変数を使用しました。
このコードはエラーを返しませんがperl -c
、.pmファイルの構文をチェックするコマンドは出力を出力しません。
myscript.pl
$ENV{'PATH'}='C:/Users/abc/Desktop/mno/wwwww/scripts/lib/perl/';
system("perl -c ContentModifySeasonPassOverlayRecord.pm");
エクスポートはPerlスクリプトでは使用できないため、環境変数を使用しました。
このコードはエラーを返しませんがperl -c
、.pmファイルの構文をチェックするコマンドは出力を出力しません。
myscript.pl
$ENV{'PATH'}='C:/Users/abc/Desktop/mno/wwwww/scripts/lib/perl/';
system("perl -c ContentModifySeasonPassOverlayRecord.pm");
あなたが何をしたいのか、もう一度推測させてください:
おそらく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");
}
#!/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
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