Согласно документации CGI
:
Многие подпрограммы будут делать что-то полезное с именованным аргументом, что он не признает.
Так что просто добавить еще один аргумент с именем -required
:
$html->popup_menu(
-name => "to",
-values => [@TO, $param_to],
-labels => {%TO, $param_to => $param_to,},
-default => $param_to,
-onchange => $onchange,
-class => "form-control",
-required => "required"
);
Это будет генерировать что-то вроде:
<select name="to" ... required="required">
Однако генерации HTML с CGI.pm
боль и не очень ремонтопригодны. Лучше использовать библиотеку шаблонов, такую как Template Toolkit. Шаблоны позволяют отделить код Perl и ваш HTML (в основном), так что вы можете иметь что-то вроде этого:
popup.tt
<select name="to" onchange="if (this.value=='[email protected]' || document.theForm.supportform.value==1) document.theForm.submit();" class="form-control">
[% FOR option IN options %]
<option value="[% option.value %]">[% option.text %]</option>
[% END %]
</select>
my_script.cgi
use strict;
use warnings;
use CGI;
use Template;
my $tt = Template->new or die Template->error;
my $q = CGI->new;
print $q->header;
my $options = [
{ value => '', text => 'select recipient' },
{ value => '[email protected]', text => 'Sales Inquiry' },
{ value => '[email protected]', text => 'Technical Support' },
{ value => '[email protected]', text => 'Jobs @ abc' },
{ value => '[email protected]', text => 'Investor Relations' },
{ value => '[email protected]', text => 'abc Webmaster' }
];
$tt->process('foo.tt', { options => $options }) or die $tt->error;
Выход
<select name="to" onchange="if (this.value=='[email protected]' || document.theForm.supportform.value==1) document.theForm.submit();" class="form-control">
<option value="">select recipient</option>
<option value="[email protected]">Sales Inquiry</option>
<option value="[email protected]">Technical Support</option>
<option value="[email protected]">Jobs @ abc</option>
<option value="[email protected]">Investor Relations</option>
<option value="[email protected]">abc Webmaster</option>
</select>
Ничего себе для редактирования, @ThisSuitisBlackNot –
Пожалуйста, не используйте методы генерации HTML в CGI.pm Они никогда не были хорошей идеей и [они должны быть устаревшими] (https://metacpan.org/pod/ не CGI # HTML-Generation-функции-должны-не-больше-быть использованы). –
Дэйв благодарит за отличный совет, я понятия не имел. Я не буду звонить на CGI.pm. Попытка найти хорошую альтернативу тому же. LMK, если у вас есть предложения. –