Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: разработка для Web > поле со списком


Автор: киса2009 6.5.2010, 22:03
Есть такой тестовый скрипт с полем со списком
Код

#!z:/usr/perl/bin/perl


print "Content-type: text/html\n\n";
 use CGI ('param');
open (FILE,">>test.txt");
print qq|
<html>
<body>
<form method="post" action="">
<select name="test" size="10">
<option value="1">Line 1</option>
<option value="2">Line 2</option>
<option value="3">Line 3</option>
<option value="4">Line 4</option>
<option value="5">Line 5</option>
<option value="6">Line 6</option>
<option value="7">Line 7</option>
</select>
<input type="submit" value="ЕА">
</form>
|;



$choice=param('test');

if ($choice==1)
{print FILE "Line1";}

if ($choice==2)
{print FILE "Line2";

if ($choice==3)
{print FILE "Line3";
}
if ($choice==4)
{print FILE "Line4";}

if ($choice==5)
{print FILE "Line5";}

if ($choice==6)
{print FILE "Line6";}

if ($choice==7)
{print FILE "Line7";}
close FILE;
print qq|
</body>
</html>
|;

задача-выбранный элемент записать в файл
подскажите что не так

Добавлено через 4 минуты и 43 секунды
косяки найдены

Автор: OutlawZ 9.5.2010, 11:14
Лучше использовать модуль use Switch чем if )

Автор: shamber 9.5.2010, 12:27
Цитата(OutlawZ @  9.5.2010,  11:14 Найти цитируемый пост)
Лучше использовать модуль use Switch чем if 

Откуда информация?

Автор: OutlawZ 9.5.2010, 23:21
Цитата(shamber @  9.5.2010,  12:27 Найти цитируемый пост)
Откуда информация? 

perldoc -v switch

Кусок из документации описания оператора:
Код

NAME
    Switch - A switch statement for Perl

VERSION
    This document describes version 2.10 of Switch, released Dec 29, 2003.

SYNOPSIS
            use Switch;

            switch ($val) {

                    case 1          { print "number 1" }
                    case "a"        { print "string a" }
                    case [1..10,42] { print "number in list" }
                    case (@array)   { print "number in list" }
                    case /\w+/      { print "pattern" }
                    case qr/\w+/    { print "pattern" }
                    case (%hash)    { print "entry in hash" }
                    case (\%hash)   { print "entry in hash" }
                    case (\&sub)    { print "arg to subroutine" }
                    else            { print "previous case not true" }
            }

BACKGROUND

Автор: shamber 10.5.2010, 12:20
OutlawZ, где написано про лучше?

Автор: OutlawZ 10.5.2010, 13:08
Цитата(shamber @  10.5.2010,  12:20 Найти цитируемый пост)
OutlawZ, где написано про лучше? 


А где это должно быть написано? считайте что тут написано ), switch он и в Африке switch, компактней получается если смотреть со стороны PHP кодинга. Все по блокам case нежели грубых if вставок, хотя я не претендую , каждый пишет как ему удобней и советует так же ), я бы лично через switch бы сделал.

Автор: Pfailed 12.5.2010, 07:56
О том, что Switch лучше там не написано, зато написано обратное. См. раздел http://search.cpan.org/~rgarcia/Switch-2.16/Switch.pm#LIMITATIONS.

Автор: odmink0 12.5.2010, 10:36
Цитата(Pfailed @ 12.5.2010,  07:56)
О том, что Switch лучше там не написано, зато написано обратное. См. раздел http://search.cpan.org/~rgarcia/Switch-2.16/Switch.pm#LIMITATIONS.

Ну то, что хуже - там точно не написано %) 

Модуль Switch лучше использовать чем "каскадный if" банально по причине лучшей читабельности кода.  Тем более, что он входит в базовую поставку в версии 5.8.8 и выше (может и ниже, не знаю точно).

Да, у модуля есть ограничения, но они практически не затрагивают код, написанный в соответствии с книгой "Perl Best Practices" того же автора (must read для каждого хорошего программиста).

С другой стороны, этот модуль использует source parsing, что в принципе может стать источником непредсказуемых ошибок - "only perl can parse Perl". Ещё одним минусом модуля является наличие незакрытых багов 1-3-хлетней давности.

Сейчас для подобных блоков лучше вместо Switch использовать конструкцию given/when, появившуюся в Perl 5.10 (который вышел почти 3 года назад и установлен сейчас на некоторых хостингах), а если в условном блоке происходит простое присваивание, то можно использовать "переключатели значения" (PBP, 6.16) или "табличные триады" (PBP, 6.17).

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)