Подробнее о сценарии языка Perl WorldTime.pl
Подробнее о сценарии языка Perl WorldTime.pl
Как было сказано выше, каждый раз, когда пользователь производит выбор горо- да, файл WorldTime.wml запускает сценарий языка Perl, который собственно и вы- числяет текущее время. После этого сценарий Perl, используя вычисленное не- давно время, создает новую WML-деку, которая передается браузеру WAP.
Приведем исходный код сценария языка Perl WorldTime.pl:
#!/usr/bin/perl
$Buffer = $ENV{'QUERY_STRING'}; $Buffer =~ s/%20/ /g;
$CityName = $Buffer;
if ($CityName eq "Honolulu") { $Delta = -10; } elsif ($CityName eq "London") { $Delta = +1; } elsif ($CityName eq "Los Angeles") { $Delta = -7; } elsif ($CityName eq "New York") { $Delta = -4; } elsif ($CityName eq "Paris") { $Delta = +2; } elsif ($CityName eq "Phoenix") { $Delta = -7; } else { $Delta = +9; }
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = gmtime(time);
$hour = $hour + $Delta;
if ($hour < 0) { $hour = $hour + 24; } elsif ($hour > 24) { $hour = $hour - 24; }
if ($hour < 10) { $hour = 0 . $hour; } if ($min < 10) { $min = 0 . $min; } if ($sec < 10) { $sec = 0 . $sec; }
$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>
<p align=\"center\">
World Time<br/>
</p>
<p align=\"left\" mode=\"wrap\">
Current time in $CityName is<br/> $hour:$min:$sec<br/>
</p>
</card>
</wml>";
print $Deck;
Первая строка сценария является просто комментарием, который сообщает интерпретатору командной строки, где находится интерпретатор языка Perl.
Сле- дующие две строки сценария позволяют ему найти параметр, который карта исходной деки передала сценарию:
$Buffer = $ENV{'QUERY_STRING'}; $Buffer =~ s/%20/ /g;
Первый оператор возвращает значение параметра. Второй оператор удаляет всепустые символы (пробелы) из названия города, которое содержится в параметре,для облегчения сценарию обработки конструкции if-else.
Далее, приложение извлекает из параметра название города. После этого сценарий использует серию операторов if-else для определения часового пояса вы- бранного города относительно времени по Гринвичу (GMT). Если приложениедолжно выдавать сведения о большем количестве городов, то в исходный коддолжны быть добавлены операторы, позволяющие вычислять разницу во време- ни для этих городов. ./.,:
Напоследок, сценарий использует функцию gmtime для вычисления текущей даты и времени по Гринвичу: ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = gmtime(time);
Для вычисления текущего времени используется разница во времени выбранного города по отношению ко времени по Гринвичу. К примеру, вычислено, чтовремя по Гринвичу 16 часов. Тогда в Финиксе (Аризона), который имеет поправкупо времени -7 часов, текущее время будет 9 часов утра.
После того как сценарий вычислит текущее время, он создает новую карту формата WML, которая передается браузеру WAP. Для того чтобы создать эту карту, сце- нарий формирует содержимое карты в символьной строке с именем $Deck. Послеэтого дека передается в браузер с использованием оператора печати print.