我發現了一個令人費解的行爲,使用perl cgi - 我猜 - 有一個完全有效的解釋,但我找不到一個。 關於stackoverflow有this問題,但它描述的似乎失敗了。 這種情況: 我有兩個perl cgi腳本。其中一個(比如script.pl
)可以生成一個網站獨立,但也有一個參數,我們稱之爲BARE
,以便它只會吐出非格式化的信息。從其他cgi腳本調用cgi腳本
#!/usr/bin/perl
use strict;
use CGI;
my $cgi = new CGI;
unless (defined $cgi->param('BARE')) {
print $cgi->header, $cgi->start_html,$cgi->h1('Hello World'), $cgi->end_html;
} else {
print "Bare";
}
現在我想從另一個腳本調用此腳本與它的「裸裝」參數設置爲本地腳本(因爲它們是在同一目錄)(姑且稱之爲call_my_script.pl
)。
#!/usr/bin/perl
use strict;
use CGI;
my $cgi = new CGI;
my $result = qx(./script.pl "BARE=1");
print $cgi->header,$cgi->start_html,$result,$cgi->end_html;
當在命令行中運行此腳本,我得到:
> ./call_my_script.pl
Content-Type: text/html; charset=ISO-8859-1
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
Bare
</body>
</html>
當,而不是我通過瀏覽器調用同一個腳本返回
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US"><head><title>Untitled Document</title>
</head><body>Content-Type: text/html; charset=ISO-8859-1
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US"><head><title>Untitled Document</title>
</head><body><h1>Hello World</h1></body></html></body></html>
所以,儘管我我正在使用qx
在本地調用第一個腳本,並且我正在傳遞參數以獲得裸版格式,但在通過瀏覽器調用某些內容時這並不受尊重。
我可能忽略了一些明顯的東西,但我會很感激它明白它是什麼。
工作環境以特定的方式。當您從另一個腳本調用它時,您是否設置了環境? – Jay
@Jay我沒有做任何特定於環境的事情 – Erik
@Erik FWIW將您希望分享給代碼的代碼提取出來並在兩個腳本中「使用」會好得多。 –