2015-02-16 1 views
3

Есть ли причина, по которой примеры CGI.pm основаны на конкатенации списков, а не на конкатенации строк? являются ли они взаимозаменяемыми? думаюperl CGI.pm: списки против строк для построения страниц

print q->hidden(-name =>'rm', -value => $var). 
     q->submit(-name =>"rm$var"); 

против

print q->hidden(-name =>'rm', -value => $var), 
     q->submit(-name =>"rm$var"); 

У меня есть конкретные причины просить. очень удобно создавать страницу из строк. в конце концов, perl понимает скалярные строки как основные типы.

Однако я совершенно озадачен некоторым нечетным поведением в контексте строки concat. В частности, я встречал случайные случаи, когда $ var в скрытом не совпадает с $ var в кнопке submit. Я мог бы обойти это, но я бы лучше понял CGI.pm.

Может кто-нибудь объяснить, должна ли строка concat работать?

ответ

3

Если вы не измените значение по умолчанию $,,

print EXPR1, EXPR2; 

и

print EXPR1 . EXPR2; 

тот же результат, если выражения не зависят от контекста. Эти функции всегда возвращают HTML-строку, поэтому вы хороши.

3

Вы правы, что оба примера имеют тот же эффект (ну, as ikegami says, если вы не изменили $,). Единственное различие, конечно, состоит в том, что в первом примере print передается одна строка, а во втором примере получается две.

Но вы читали comments about the HTML generation functions в последних версиях документации CGI.pm?

Все функции генерации HTML в CGI.pm больше не поддерживаются . Любые проблемы, ошибки или исправления будут отклонены, если они не будут отформатированы .

Обоснование этого состоит в том, что функции генерации HTML CGI.pm являются, в лучшем случае, обфускацией и кошмаром обслуживания в худшем случае. Вы должны использовать механизм шаблонов для лучшего разделения проблем. См. CGI :: Альтернативы для примера использования CGI.pm с модулем Template :: Toolkit .

Эти функции и perldoc для них будут и впредь существовать в выпусках CGI.pm v4, но могут быть устаревшими (мягкими) в версии 5 и выше.

Я бы серьезно подумал о том, чтобы перейти от этих функций (и, собственно, к CGI.pm) к новой работе.

+1

отличный совет. это новый проект, и я в первую очередь хотел перейти к тому, что такое «стандарт». обучение и переход к устаревшему - это не мой план. –

Смежные вопросы