system を使用して perl プログラムを実行すると、次のエラーが発生します。
> system("perl txt2xlsx.pl", intern=TRUE, wait=TRUE)
character(0)
attr(,"status")
[1] 2
Warning message:
running command 'perl txt2xlsx.pl' had status 2
ただし、ターミナル/コンソールからスクリプトを実行すると、完全に正常に動作します。テスト目的で、「出力」を画面に出力するだけの別の perl スクリプトを同じディレクトリに配置し、次のように実行しました。
> system("perl test.pl", intern=TRUE, wait=TRUE)
[1]「アウトプット」
正常に動作します。
引数なしで txt2xlsx.pl スクリプトを実行すると、次のように出力されます。
Usage: txt2xlsx.pl <directory> <output file>
なぜ R がこのエラーを返すのか想像できますか? 最新のperlバージョンに更新するまではうまくいきました:
This is perl 5, version 12, subversion 4 (v5.12.4) built for darwin-multi-2level
乾杯
これが私のperlスクリプトの一部です:
#!/usr/bin/perl
use Excel::Writer::XLSX;
# Check command line args
if($#ARGV != 1) {
die("Usage: $0 <directory> <output file>\n\n");
}
my $dir = $ARGV[0];
my $output = $ARGV[1];
print "Output : $output\n";
print "Directory : $dir\n";
# Create excel workbook
my $wb = Excel::Writer::XLSX->new($output);
# Process files
foreach (glob("$dir/*.txt")) {
....
}
#EOF
さらにテストを行い、perl スクリプトを縮小して 2 つの引数のみを出力しました。
#!/usr/bin/perl
#use Excel::Writer::XLSX;
# Check command line args
if($#ARGV != 1) {
die("Usage: $0 <directory> <output file>\n\n");
}
my $dir = $ARGV[0];
my $output = $ARGV[1];
print "Output : $output\n";
print "Directory : $dir\n";
予想される 2 つの引数を使用してプログラムを呼び出すと、システムは機能します。
> system("perl test.pl asd dasd", intern=TRUE, wait=TRUE)
[1] "Output : dasd" "Directory : asd"
それがないと、同じエラー メッセージが生成されます。
> system("perl test.pl", intern=TRUE, wait=TRUE)
character(0)
attr(,"status")
[1] 255
Warning message:
running command 'perl test.pl asd dasd' had status 255
次のエラーを#use Excel::Writer::XLSX;
使用してシステムコールをコメントすると、次のように気づきました。system
> system("perl test.pl asd dasd", intern=TRUE, wait=TRUE)
character(0)
attr(,"status")
[1] 2
Warning message:
running command 'perl test.pl asd dasd' had status 2
そのため、XLSX perl モジュールが気に入らないようです。ただし、既に述べたように、ターミナルでスクリプトを実行すると問題なく動作します。また、更新前のRシステムコールでも機能しました...
--------------------
私は StatET と Eclipse を使用しており、通常の R バージョンで実行しようとしました。そこでは、エラーメッセージがより明確になります。R を介して perl 呼び出しを呼び出すと、perl はコードで使用されている XLSX パッケージを見つけることができません。
> system("perl test.pl asd asd", intern=TRUE, wait=TRUE)
character(0)
attr(,"status")
[1] 2
Warning message:
running command 'perl test.pl asd asd' had status 2
Can't locate Excel/Writer/XLSX.pm in @INC (@INC contains: /Library/Perl/5.12/darwin-
thread-multi-2level /Library/Perl/5.12 /Network/Library/Perl/5.12/darwin-thread-multi-
2level /Network/Library/Perl/5.12 /Library/Perl/Updates/5.12.4
/System/Library/Perl/5.12/darwin-thread-multi-2level /System/Library/Perl/5.12
/System/Library/Perl/Extras/5.12/darwin-thread-multi-2level
/System/Library/Perl/Extras/5.12 .) at test.pl line 3.
BEGIN failed--compilation aborted at test.pl line 3.
誰もそれを修正する方法を知っていますか?