在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.而不是我的两个输入。为什么!?
答案 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";
}