![]() |
Модуль HTML:
Для обработки HTML-документов, содержащих инструкции с кодом Perl
|
|
Ключи
Ключи позволяют видоизменять код perl, размещенный в инструкциях.
Их можно указывать в полном или в сокращенном виде. [keys] : • Ключи '
|
| 1 | 1. Текст HTML<br> |
| 2 | <%pl -end |
| 3 | print "2. Первый end<br>"; |
| 4 | %> |
| 5 | 3. Текст HTML<br> |
| 6 | |
| 7 | <%pl -begin |
| 8 | print "4. Первый begin<br>"; |
| 9 | %> |
| 10 | 5. Текст HTML<br> |
| 11 | |
| 12 | <%pl -end |
| 13 | print "6. Второй end<br>"; |
| 14 | %> |
| 15 | 7. Текст HTML<br> |
| 16 | |
| 17 | <%pl -bg |
| 18 | print "8. Второй begin<br>"; |
| 19 | %> |
| 20 | 9. Текст HTML<br> |
При использовании данного ключа, отпадает необходимость ограничивать код perl указателями инструкций. Анализатор будет воспринимать весь текст документа, как Perl-код.
| 1 | %pl -pl |
| 2 | |
| 3 | use CGI; |
| 4 | |
| 5 | print "Content-type: text/html; charset=utf-8\n\n"; |
| 6 | |
| 7 | my $test = "Текст"; |
| 8 | my $q = new CGI; |
| 9 | |
| 10 | print $q -> h4("$test из модуля CGI"); |
| 11 | print ("<H4>$test из Phl</H4>"); |
Ключ позволяет выполнить код, заключенный внутри инструкции, в процессе работы анализатора (перед его выполнением
Например, попробуем с помощью данного ключа изменить указатели '
| 1 | <%pl -eval |
| 2 | $phl{lt} = '['; |
| 3 | $phl{rt} = ']'; |
| 4 | $phl{ln} = '~'; |
| 5 | $phl{sh} = ''; |
| 6 | %> |
Указатели инструкций приобрели совершенно другой вид.
Теперь инструкцию можно написать таким вот образом:
| 1 | [= |
| 2 | Многострочный блок |
| 3 | ] |
или таким
| 1 | [ print "Однострочный блок" ] |
или таким
| 1 | ~ print "Линейная инструкция" |
Код, заключенный внутри инструкции, выполняется в параллельном дочернем процессе, созданном в результате запуска
| 1 | <%pl:f1 -fork |
| 2 | # Код дочернего процесса с именем f1 |
| 3 | my $f; |
| 4 | sleep 1; # Параллельная обработка данных процессом f1 |
| 5 | return $f; |
| 6 | %> |
Код, заключенный внутри инструкции, выполняется в параллельном потоке ("нити", "ветке" процесса), созданном стандартным модулем '
| 1 | <%pl:t1 -thread |
| 2 | # Код нити с именем t1 |
| 3 | my $t; |
| 4 | sleep 1; # Параллельная обработка данных нитью t1 |
| 5 | return $t; |
| 6 | %> |
Ключ дает возможность получить результаты выполнения дочерних процессов и нитей.
Результаты размещаются в хэше
| 1 | <%pl -join |
| 2 | # Результаты выполнения параллельных дочерних процессов и потоков |
| 3 | foreach my $key(keys(%phl_join)) { |
| 4 | if (ref $phl_join{$key}) { # если значение - ссылка |
| 5 | my @result = @{$phl_join{$key}}; |
| 6 | print "процесс '$key' - результат первого аргумента '$result[0]'"; |
| 7 | } else { |
| 8 | print "процесс '$key' - результат '$phl_join{$key}'"; |
| 9 | } |
| 10 | } |
| 11 | %> |
При желании можно определить свои собственные (дополнительные) ключи или переопределить существующие. Это реализуется с помощью специально оформленных модулей.
Так, к примеру, с помощью модуля '
Пример:
| 1 | %pl -ev use HTML::Phl::Utilit; |
| 2 | |
| 3 | %pl -import |