当我从Perl调用它时,为什么我的Java程序会挂起?

时间:2009-10-01 02:46:15

标签: perl

在Perl脚本中,我想运行一个Java程序,该程序接收2个输入,这些输入将由命令行传递。

所以我这样做:

if (scalar @ARGV == 2)
{ print `java myProg $ARGV[0] $ARGV[1]`; } 
elsif (scalar @ARGV == 1) 
{ print `java myProg $ARGV[0]`; } 

如果我输入2个参数,我会工作,但如果我只输入1个参数,则仍然会挂起

我该如何纠正?

BTW,Java程序可以运行。


我将Perl脚本更改为:

print scalar @ARGV;
print `$ARGV[0]`;
print `$ARGV[1]`;

如果我在命令行中运行'perl myPerl.pl abc def',它只打印2.而不是我的两个输入。为什么!?

5 个答案:

答案 0 :(得分:7)

回答您的最新问题:

print scalar @ARGV;
print `$ARGV[0]`;
print `$ARGV[1]`;

上面的代码不会打印您期望的数据,因为您正在使用带有一些随机输入数据的反引号。 Perl尝试执行shell命令“abc”和“def”(根据您的示例)并捕获运行这些命令的输出,其中没有任何命令。尝试直接打印值:

print scalar @ARGV;
print $ARGV[0], "\n";
print $ARGV[1], "\n";

答案 1 :(得分:3)

java程序正在挂起 。直接从命令行尝试。

要检查是否有足够的args:

 die "needs 2 args" unless (scalar @ARGV == 2);

尝试使用此代码来证明它是java:

if (scalar @ARGV == 2)
{ 
    print `cat myProg $ARGV[0] $ARGV[1]`; 
} 
elsif (scalar @ARGV==1) 
{ 
    print `cat myProg $ARGV[0]`; 
}

如果您只想打印参数:

if (scalar @ARGV == 2)
{ 
    print "arguments = [$ARGV[0]] [$ARGV[1]]\n"; 
} 
elsif (scalar @ARGV==1) 
{ 
    print "arguments = [$ARGV[0]]\n"; 
}

答案 2 :(得分:2)

第二个代码示例正在脱轨,但第一个代码示例看起来是正确的,或多或少。让我们看看Java代码,您的环境或其他任何可以帮助我们找出原因

的内容
{ print `java myProg $ARGV[0] $ARGV[1]`; } 

有效,

{ print `java myProg $ARGV[0]`; }

答案 3 :(得分:0)

试试这个:

use strict;
use warnings;

my $BASE_COMMAND = 'java MyProgram';

die "Illegal argument count - must have one or two arguments."
    unless @ARGV == 1 or @ARGV == 2;

# Arrays interpolate into space separated strings (unless you change $" - see perlvar)
my $command = "$BASE_COMMAND @ARGV";

print "Running '$command'\n";
print `$command`;

答案 4 :(得分:-2)

使用$#ARGV查找@ARGV的最后一个数组元素的索引。添加1,你可以得到arg计数。

my $argCount = $#ARGV + 1;
if ($argCount == 1)
{
    die "Please enter 2 arguments!\n";
}