Подробнее о сценарии языка 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 = "<option onpick=\"UpdateHouseWML.pl?1\& $Kitchen\&$Living\&$Office\&$Outside\">"; $OptionBedroom = $OptionBedroom . "Bedroom is OFF</option>"; } else { $OptionBedroom = "<option onpick=\"UpdateHouseWML.pl?0\& $Kitchen\&$Living\&$Office\&$Outside\">"; $OptionBedroom = $OptionBedroom . "Bedroom is ON</option>"; }
if ($Kitchen eq 0) { $OptionKitchen = "<option onpick=\"UpdateHouseWML.pl? $Bedroom\&1\&$Living\&$Office\&$Outside\">"; $OptionKitchen = $OptionKitchen . "Kitchen is OFF</option>"; } else { $OptionKitchen = "<option onpick=\"UpdateHouseWML.pl? $Bedroom\&0\&$Living\&$Office\&$Outside\">"; $OptionKitchen = $OptionKitchen . "Kitchen is ON</option>"; }
if ($Living eq 0) { $OptionLiving = "<option onpick=\"UpdateHouseWML.pl? $Bedroom\&$Kitchen\&1\&$Office\&$Outside\">"; $OptionLiving = $OptionLiving . "Living room is OFF</option>"; } else { $OptionLiving = "<option onpick=\"UpdateHouseWML.pl? $Bedroom\&$Kitchen\&0\&$Office\&$Outside\">"; $OptionLiving = $OptionLiving . "Living room is ON</option>"; }
if ($Office eq 0) { $OptionOffice = "<option onpick=\"UpdateHouseWML.pl? $Bedroom\&$Kitchen\&$Living\&1\&$Outside\">"; $OptionOffice = $OptionOffice . "Office is OFF</option>"; } else { $OptionOffice = "<option onpick=\"UpdateHouseWML.pl? $Bedroom\&$Kitchen\&$Living\&0\&$Outside\">"; $OptionOffice = $OptionOffice . "Office is ON</option>"; }
if ($Outside eq 0) { $OptionOutside = "<option onpick=\"UpdateHouseWML.pl? $Bedroom\&$Kitchen\&$Living\&$Office\&1\">"; $OptionOutside = $OptionOutside . "Outside is OFF</option>"; } else { $OptionOutside = "<option onpick=\"UpdateHouseWML.pl? $Bedroom\&$Kitchen\&$Living\&$Office\&0\">"; $OptionOutside = $OptionOutside . "Outside is ON</option>"; }
$Deck = "Content-type: text/vnd.wap.wml
<?xml version=\"1.0\"?> <!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\" \"http://www.wapforum.org/DTD/wml_1.1.xml\">
<wml>
<head>
<meta http-equiv=\"Cache-Control\" content=\"max-age=0\" forua=\"true\"/>
</head>
<card id=\"House\">
<do type=\"accept\" label=\"OnOff\"> <noop /> </do>
<p align=\"center\">
Smart House
</p>
<p align=\"left\" mode=\"nowrap\">
<select>
$OptionBedroom $OptionKitchen $OptionLiving $OptionOffice $OptionOutside
</select>
</p>
</card>
</wml>";
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. Браузер отображает конечный результат установок надисплее сотового телефона.