Пособие по написанию WAP-сайтов

         

Подробнее о сценарии языка Perl UpdateHouseWML.pl



Подробнее о сценарии языка Perl UpdateHouseWML.pl

В идеале приложение SmartHouse соединяется с оборудованием, находящимсявнутри вашего дома. В нашем случае это оборудование симулирует сценарий языка Perl. Этот сценарий содержит следующий исходный код:

#!/usr/bin/perl

$Buffer = $ENV{'QUERY_STRING'};

@data = split(/&/, $Buffer);

$Bedroom = $data[0]; $Kitchen = $data[1]; $Living = $data[2]; $Office = $data[3]; $Outside = $data[4];

if ($Bedroom eq -1) { srand; $Bedroom = rand(); $Bedroom = int ($Bedroom + .5);

$Kitchen = rand(); $Kitchen = int ($Kitchen + .5);

$Living = rand(); $Living = int ($Living + .5);

$Office = rand(); $Office = int ($Office + .5);

$Outside = rand(); $Outside = int ($Outside + .5); }

if ($Bedroom eq 0) { $OptionBedroom = "&ltoption onpick=\"UpdateHouseWML.pl?1\& $Kitchen\&$Living\&$Office\&$Outside\"&gt"; $OptionBedroom = $OptionBedroom . "Bedroom is OFF&lt/option&gt"; } else { $OptionBedroom = "&ltoption onpick=\"UpdateHouseWML.pl?0\& $Kitchen\&$Living\&$Office\&$Outside\"&gt"; $OptionBedroom = $OptionBedroom . "Bedroom is ON&lt/option&gt"; }

if ($Kitchen eq 0) { $OptionKitchen = "&ltoption onpick=\"UpdateHouseWML.pl? $Bedroom\&1\&$Living\&$Office\&$Outside\"&gt"; $OptionKitchen = $OptionKitchen . "Kitchen is OFF&lt/option&gt"; } else { $OptionKitchen = "&ltoption onpick=\"UpdateHouseWML.pl? $Bedroom\&0\&$Living\&$Office\&$Outside\"&gt"; $OptionKitchen = $OptionKitchen . "Kitchen is ON&lt/option&gt"; }



if ($Living eq 0) { $OptionLiving = "&ltoption onpick=\"UpdateHouseWML.pl? $Bedroom\&$Kitchen\&1\&$Office\&$Outside\"&gt"; $OptionLiving = $OptionLiving . "Living room is OFF&lt/option&gt"; } else { $OptionLiving = "&ltoption onpick=\"UpdateHouseWML.pl? $Bedroom\&$Kitchen\&0\&$Office\&$Outside\"&gt"; $OptionLiving = $OptionLiving . "Living room is ON&lt/option&gt"; }



if ($Office eq 0) { $OptionOffice = "&ltoption onpick=\"UpdateHouseWML.pl? $Bedroom\&$Kitchen\&$Living\&1\&$Outside\"&gt"; $OptionOffice = $OptionOffice . "Office is OFF&lt/option&gt"; } else { $OptionOffice = "&ltoption onpick=\"UpdateHouseWML.pl? $Bedroom\&$Kitchen\&$Living\&0\&$Outside\"&gt"; $OptionOffice = $OptionOffice . "Office is ON&lt/option&gt"; }

if ($Outside eq 0) { $OptionOutside = "&ltoption onpick=\"UpdateHouseWML.pl? $Bedroom\&$Kitchen\&$Living\&$Office\&1\"&gt"; $OptionOutside = $OptionOutside . "Outside is OFF&lt/option&gt"; } else { $OptionOutside = "&ltoption onpick=\"UpdateHouseWML.pl? $Bedroom\&$Kitchen\&$Living\&$Office\&0\"&gt"; $OptionOutside = $OptionOutside . "Outside is ON&lt/option&gt"; }

$Deck = "Content-type: text/vnd.wap.wml

&lt?xml version=\"1.0\"?&gt &lt!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\" \"http://www.wapforum.org/DTD/wml_1.1.xml\"&gt

&ltwml&gt

&lthead&gt

&ltmeta http-equiv=\"Cache-Control\" content=\"max-age=0\" forua=\"true\"/&gt

&lt/head&gt

&ltcard id=\"House\"&gt

&ltdo type=\"accept\" label=\"OnOff\"&gt &ltnoop /&gt &lt/do&gt

&ltp align=\"center\"&gt

Smart House

&lt/p&gt

&ltp align=\"left\" mode=\"nowrap\"&gt

&ltselect&gt

$OptionBedroom $OptionKitchen $OptionLiving $OptionOffice $OptionOutside

&lt/select&gt

&lt/p&gt

&lt/card&gt

&lt/wml&gt";

print $Deck;

Как было сказано выше, когда приложение вызывает сценарий языка Perl, емупередаются параметры, которые соответствуют установкам в доме.


Когда сценарий начинает выполняться, он использует функцию $ENV для получения указателя на список параметров. Далее, исходный код использует функцию разделенияsplit (/&/, $Buffer) для анализа переданного, используя символ & (амперсанд)как разделитель и передавая значения массиву с именем gdata. В итоге в сценарии присваиваются значения элементов массива переменным, которые будут использоваться в процессе работы:

$Buffer = $ENV{'QUERY_STRING'};

@data = split(/&/, $Buffer);

$Bedroom = $data[0]; $Kitchen = $data[1]; $Living = $data[2]; $Office = $data[3]; $Outside = $data[4];

Далее, в исходном коде проверяется значение переменной $Bedroom. Если значение этой переменной равно -1, которое означает, что приложение вызываетсценарий в первый раз и сценарий должен сгенерировать случайные значенияустановок ON/OFF (ВКЛ/ВЫКЛ) бытовой техники в доме.

Если приложение вызывает сценарий не в первый раз, сценарий обрабатываетпоследовательность конструкций if-else, определяя, производятся ли пользователем изменения в установках, и если да, то какое значение (ON или OFF) имеет на данный момент определенная установка (сценарий может также менять этизначения).

После этого сценарий с новыми значениями установок создает еще одну карту,используя элемент print. Браузер отображает конечный результат установок надисплее сотового телефона.


Содержание раздела