[英]Strange behavior when passing parameters to a Perl/CGI script, from another Perl/CGI script
對於工作中的項目,我需要從另一個調用一個Perl / CGI腳本。 我用於測試的腳本的極簡化版本在這里(真正的腳本不使用遞歸,但這樣我就不必復制和粘貼大量代碼):
#!/usr/local/bin/perl
use CGI qw(:standard);
use POSIX 'setsid';
$|=1;
print "Content-type: text/html\n\n";
@names = param;
print "@names";
if(defined(param('submit'))){
#delete_all();
system('perl testParams.pl abc=123');
exit(0);
} else{
print "NO SUBMIT PARAM";
}
這個腳本應該做什么:
腳本實際上做了什么:
知道是什么導致Perl / CGI忽略新參數,而是在運行腳本時發送舊參數嗎?
CGI僅在未找到CGI環境時處理命令行參數。 CGI環境是從父進程繼承的。 你可以用它擦拭它
my %CGI_VARS = map { $_ => 1 } qw(
REQUEST_METHOD
CONTENT_LENGTH
CONTENT_TYPE
...
);
local %ENV =
map { $_ => $ENV{$_} }
grep !$CGI_VARS{$_} && !/^HTTP/,
keys(%ENV);
但這種糟糕的設計令人厭惡。 實際上,您的兩個腳本應該是一個通用模塊的前端。
您甚至可以為兩者使用相同的腳本(通過使用符號鏈接),但可以根據用於調用腳本的URL更改行為。
從嵌入式應用程序的CGI,每個調用param()得到他們的args簡單的答案是從@ARGV創建新的CGI對象
#!/usr/bin/perl --
use strict;
use warnings;
use CGI ();
Main( @ARGV );
exit( 0 );
sub Main {
my $cgi = @_ ? CGI->new(@_) : CGI->new;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.