Почему модуль Perl CGI использует дефисы для запуска именованных аргументов? - PullRequest
4 голосов
/ 22 декабря 2010

Я новичок.Мой вопрос: что означает "-" перед ключами (тип, срок действия и т. Д.)?Почему бы просто не использовать простой способ хэширования и отбросить дефис?

# #!/usr/local/bin/perl -w
use CGI; 
$q = CGI->new; 
print $q->header(-type=>'image/gif',-expires=>'+3d');
$q->param(-name=>'veggie',-value=>'tomato');

Ответы [ 4 ]

9 голосов
/ 22 декабря 2010

Автор уже объяснил в документации .

Большинство подпрограмм CGI.pm принимают несколько аргументов, иногда до 20 необязательных!Чтобы упростить этот интерфейс, все процедуры используют стиль вызова именованных аргументов, который выглядит следующим образом:

print $ q-> header (-type => 'image / gif', - expires => '+ 3d');

Каждому имени аргумента предшествует тире.Ни регистр, ни порядок не имеют значения в списке аргументов.-type, -Type и -TYPE являются приемлемыми.На самом деле, только первый аргумент должен начинаться с тире.Если в первом аргументе присутствует тире, CGI.pm предполагает дефисы для последующих.

Несколько процедур обычно вызываются только с одним аргументом.В случае этих подпрограмм вы можете предоставить один аргумент без имени аргумента.header () является одной из этих подпрограмм.В этом случае единственным аргументом является тип документа.

print $ q-> header ('text / html');

7 голосов
/ 22 декабря 2010

См. perlop :

Если операнд является идентификатором, возвращается строка, состоящая из знака минус, соединенного с идентификатором. В противном случае, если строка начинается с плюса или минуса, возвращается строка, начинающаяся с противоположного знака. Одним из последствий этих правил является то, что -bareword эквивалентно строке "-bareword". (выделение мое)

2 голосов
/ 22 декабря 2010

Это просто старый стиль аргументов perl, который обычно не используется в новых модулях.Это не совсем устарело, это просто старый стиль, основанный на том, как Perl позволяет вам не заключать в кавычки ваши ключи хеша, если они начинаются с тире.

0 голосов
/ 22 декабря 2010

Я не знаю, что вы подразумеваете под «простым способом хеширования». При реализации CGI :: pm имена свойств (в большинстве случаев) должны предшествовать '-', предположительно, чтобы их можно было идентифицировать.

Или, другими словами, хеш-ключ, требуемый CGI :: header для идентификации свойства 'type', равен '-type'.

Именно так определяется CGI.pm.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...