Forum Webscript.Ru
Программирование => Perl => Тема начата: AnnA от 23 Января 2006, 17:37:53
-
всем приветик. ;)
вот интересно - кто как с этим разбирается.
Есть форма, собираемая скриптом же. Т.е. она динамична.
Предположим есть в ней пару десятков чекбоксов, к ним же по селекту и, т.о., на скрипт она отдает, например вот такое:
hide_1=2
desc_2=7
desc_1=5
Т.е. цифровой ряд в конструкции _цифра может быть каким угодно, а может вообще не быть параметра, как в примере нет hide_2.
Как бы мне их проверять? Не только их наличие, но и группировать: hide_1 => desc_1 ну и т.д.
Ну забрала я в хэш все, что пришло из формы и чего?
if (exists(что?)) для большого ряда цифр проверять циклом значение hide_цифра?! фи. некрасиво. Да и группировать потом как-то надо.
М.б. есть какие-то идеи?
-
$hide_1=2;
$desc_2=7;
$desc_1=5;
my $max_value=4;
for my $digit (1..$max_value){
for my $prefix (qw(hide_ desc_)){
if(defined ${"$prefix$digit"}){
print qq! $prefix$digit=!.${"$prefix$digit"};
}
}
print "\\n";
}
Для CGI.pm соотв. ${"$prefix$digit"} заменить на param("$prefix$digit")
Группируете во внутреннем цикле (если не понятно).
-
Kannabismus
спасибо. :)
моё решение выглядит приблизительно так же. если интересно - могу показать. но я просто подумала, что - возможно - есть какое-то иное - более красивое, что ли. Не знаю как сказать чем именно меня не устраивает такой подход... он неуниверсален, что ли. Видите - он завсит целиком вот от этого: my $prefix (qw(hide_ desc_)) в Вашем случае.
в моем это выглядит так: my @arr=qw(delay_ title_ hide_);
я люблю универсальность кода. :) но, судя по всему в данном случае ее не добиться.
-
Тогда посмотрите на такой вариант:
use CGI qw/:standard/;
param(\'hide_1\',2);
param(\'desc_2\',7);
param(\'desc_1\',5);
my $arr;
# группировка
for(param){
/^(.+)_(\\d+)$/ or warn "unrecognized param $_";
$arr->[$2]->{$1}=param($_);
}
# вывод
for my $i (0..$#$arr){
next unless defined $arr->[$i];
print qq!$_$i -> $arr->[$i]->{$_} ! for sort keys %{$arr->[$i]};
print "\\n";
}
perl test.pl
desc1 -> 5 hide1 -> 2
desc2 -> 7
Для удобства можно использовать CGI::FormBuilder