Pergunta

Para um script Perl CGI, qual é a diferença (tecnicamente) entre esses dois?

#!/usr/bin/perl 
use CGI; 
$cgi = new CGI; 
print $cgi->header(),
$cgi->start_html(),
$cgi->pre($cgi->param()), 
$cgi->end_html();

e

#!/usr/bin/perl 
use CGI; 
$cgi = new CGI; 
print $cgi->header(),
$cgi->start_html(), 
$cgi->pre($ENV{'QUERY_STRING'}), 
$cgi->end_html();
Foi útil?

Solução

Suponha uma solicitação HTTP como esta:

GET my.cgi?foo=bar&baz=buz

Quando executado sob um servidor da web com uma interface CGI convencional, a variável de ambiente query_string será foo=bar&baz=buz. A variável ambiental não será usada por URL. Imprimindo com $cgi->pre(...) Simplesmente envolverá o Env var com <pre></pre> tags (ou um único <pre /> tag Se o valor for ou for coagido a uma string vazia.

$cgi->param(), por outro lado, e assumindo um contexto de lista sem argumentos, retornará um Lista do URL-UNESCAPED Nomes de parâmetros CGI, neste caso foo e bar.

(Observe que $cgi->pre(...) faz não Html-escape seu argumento, então $ENV{QUERY_STRING} Pode apenas comprometer seu CGI com uma pequena injeção de script de sites.)

Outras dicas

o param O método no objeto CGI retorna uma lista de todos os parâmetros de consulta, incluindo parâmetros GET e POST. A menos que você passe em um argumento, nesse caso, ele procura um parâmetro com esse nome e retorna o valor.

o QUERY_STRING A variável de ambiente contém a sequência de consulta incomparada.

Isso teria sido bastante óbvio se você tivesse tentado o código em questão.

Aqui é a documentação para param.

Por fonte de CGI.PM

#### Method: param
# Returns the value(s)of a named parameter.
# If invoked in a list context, returns the
# entire list.  Otherwise returns the first
# member of the list.
# If name is not provided, return a list of all
# the known parameters names available.
# If more than one argument is provided, the
# second and subsequent arguments are used to
# set the value of the parameter.

QUERY_STRING é definido pelo servidor da web, é simplesmente a sequência de consulta do URI: Você pode ler mais sobre isso aqui

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top