簡體   English   中英

Perl:CGI模塊-將param()作為參數傳遞給子例程

[英]Perl: CGI module - passing param() as parameters to subroutines

有關使用Perl CGI模塊的問題:

假設我有一個名為foo的子程序,它接受兩個定義如下的參數:

sub foo {
   local($a, $b) = @_;
   print "a= [$a]";
}

在我的主例程中,我采用了一些形式參數並將它們傳遞給foo,如下所示:

use CGI;
$cgi = CGI->new;
foo($cgi->param('field1'), $cgi->param('field2'));

如果表單未傳遞field1的值(在我的示例中,使用了一個名為field1的SELECT字段,沒有可供選擇的值),則子foo會將$ a設置為$ cgi-> param中傳遞的值('field2'),這是一個非空值。

有人可以幫助我理解為什么會發生這種情況,以及為什么$ a不僅僅是一個空白('')值,而$ b =從$ cgi-> param('field2')發送來的值嗎?

我確定這是有道理的,但是我不是Perl專業人士,所以我確定這是我尚未了解或了解的有關Perl的知識。

提前致謝!

如果在列表或標量上下文中調用, CGIparam()函數的行為將有所不同。 在標量上下文中,將返回第一個(也是唯一的)參數值。 在列表上下文中,將返回所有參數值(請記住,CGI允許每個鍵具有多個值)。

如果這樣調用函數,則使用列表上下文。 這意味着$cgi->param('field1')為空列表,並且$cgi->param('field2')的第一個值在子例程中分配給$a 為了避免這種情況,您必須顯式強制標量上下文。 這可以通過使用scalar來完成:

foo(scalar($cgi->param('field1')), scalar($cgi->param('field2')));

另一種可能性是使用中間變量:

my $field1 = $cgi->param('field1'); # scalar context here
my $field2 = $cgi->param('field2');
foo($field1, $field2);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM