这是AWS Windows 7 VM上的perl代码。 在下面的代码中, e.pl ab
应该返回1
而不是-1
。
这只发生在AWS VM上。 任何帮助将不胜感激。
C:\test>type e.pl #!c:\strawberry\perl\bin\perl.exe print " \$#ARGV = $#ARGV\n"; C:\test>e.pl ab $#ARGV = -1
——————-评论————-
感谢大家的帮助。 这是相当复杂的,因为它是我正在工作的http服务的一部分。 问题在于以下两行代码中。 第一行有口译员。 但它打破了http服务。 第二行在我的桌面上运行。 但在AWS(amazon web servicesEC2虚拟机)上不起作用。 我的故障拍摄发现第二行代码不会将$ args传递给driver.pl。 这是非常困难的拍摄麻烦。 感谢大家的帮助! 如果没有回答就可以了。
顺便说一句,我是一个经验丰富的perl编码器,并赞赏每个人的投入。
#my $ cmd =“start C:/strawberry/perl/bin/perl.exe c:/ $ _ TAF / driver.pl $ args”; < – 这打破了http服务
my $ cmd =“start c:/ $ _ TAF / driver.pl $ args”; < – 这行不会将$ args传递给driver.pl
——–这里是原始代码———
#!/usr/bin/perl { package MyWebServer; use HTTP::Server::Simple::CGI; use base qw(HTTP::Server::Simple::CGI); my %dispatch = ( '/hello' => \&resp_hello, ); sub handle_request { my $self = shift; my $cgi = shift; my $path = $cgi->path_info(); my $handler = $dispatch{$path}; if (ref($handler) eq "CODE") { print "HTTP/1.0 200 OK\r\n"; $handler->($cgi); } elsif (-e "${root}${path}") { print "HTTP/1.0 200 OK\r\n"; { #### process taf.cgi ######################## sub taf_cgi { my $args = "help"; $args = $cgi->param("args"); my $tafRedirectory = $cgi->param("tafRedirectory"); my $refreshRate = 5; print $cgi->header, $cgi->start_html("$root$path"); print "<pre>"; { #my $cmd = "start C:/strawberry/perl/bin/perl.exe c:/$_TAF/driver.pl $args"; # <<<<<<<<<<<<<<< my $cmd = "start c:/$_TAF/driver.pl $args"; # <<<<<<<<<<<<<<< if ($^O =~ /win32/i) { ; } elsif ( $^O =~ /linux/i) { $cmd = "/usr/bin/perl /tmp/var/www/cgi-bin/$_TAF/driver.pl $args"; } system $cmd; } print<<EOF1; </pre> <meta http-equiv="refresh" content="$refreshRate; url=$tafRedirectory"> EOF1 print $cgi->end_html ; ####################### } } } } sub resp_hello { my $cgi = shift; # CGI.pm object return if !ref $cgi; ...... ignored } } # start the server on port 8080 my $httpport = 8080; if ($^O =~ /win32/i) {;} elsif ($^O =~ /linux/i) { $httpport = "1234"; } my $pid = MyWebServer->new($httpport)->background(); print "Use 'kill $pid' to stop server.\n";
我的猜测是你有与Perl关联的*.pl
文件,但没有正确配置它将命令行参数传递给Perl解释器。
例如,通过我的Windows注册表搜索“草莓”最终会启动文件关联(在\HKEY_CLASSES_ROOT\Perl_program_file\shell\Execute Perl Program\command
并再次在\HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Perl_program_file\shell\Execute Perl Program\command
)为
"C:\strawberry516\perl\bin\perl.exe" "%1" %*
%*
在最后是很重要的,我怀疑你错过了它 – 它代表了所有其他的命令行参数( %1
是你的脚本的名称)。
(我不是编辑注册表值的专家,也不接受如果您尝试的话会发生什么情况)。