camel
Модуль HTML::Phl
Для обработки HTML-документов, содержащих инструкции с кодом Perl
О модуле Спецификация Downloads Контакты

Ключи  

Ключи позволяют видоизменять код perl, размещенный в инструкциях.

Их можно указывать в полном или в сокращенном виде.

[keys] : -begin    <=> -bg
         -end      <=> -end
         -perl_all <=> -pl
         -eval     <=> -ev
         -fork     <=> -fk
         -thread   <=> -td
         -join     <=> -jn

• Ключи '-begin' [ '-bg' ] и '-end'

При использовании ключа '-begin' анализатор берет код perl, содержащийся в инструкции, и оборачивает его блоком 'BEGIN {}'.

То же самое происходит при использовании ключа '-end' - код perl помещается в блок 'END {}'.


Исходный код:

 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_all' [ '-pl' ]

При использовании данного ключа, отпадает необходимость ограничивать код 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>");



• Ключ '-eval' [ '-ev' ]

Ключ позволяет выполнить код, заключенный внутри инструкции, в процессе работы анализатора (перед его выполнением eval).

Например, попробуем с помощью данного ключа изменить указатели '<%pl' и др., разместив в коде следующую инструкцию:

 1 <%pl -eval
 2    $phl{lt} = '[';
 3    $phl{rt} = ']';
 4    $phl{ln} = '~';
 5    $phl{sh} = '';
 6 %>

Указатели инструкций приобрели совершенно другой вид.

Теперь инструкцию можно написать таким вот образом:

 1 [=
 2    Многострочный блок
 3 ]

или таким

 1 [ print "Однострочный блок" ]

или таким

 1 ~ print "Линейная инструкция"

• Ключ '-fork' [ '-fk' ]

Код, заключенный внутри инструкции, выполняется в параллельном дочернем процессе, созданном в результате запуска fork().


 1 <%pl:f1 -fork
 2    # Код дочернего процесса с именем f1
 3    my $f;
 4    sleep 1; # Параллельная обработка данных процессом f1
 5    return $f;
 6 %>  

• Ключ '-thread' [ '-td' ]

Код, заключенный внутри инструкции, выполняется в параллельном потоке ("нити", "ветке" процесса), созданном стандартным модулем 'threads' в рамках одного процесса.


 1 <%pl:t1 -thread
 2    # Код нити с именем t1
 3    my $t;
 4    sleep 1; # Параллельная обработка данных нитью t1
 5    return $t;
 6 %>  

• Ключ '-join' [ '-jn' ]

Ключ дает возможность получить результаты выполнения дочерних процессов и нитей.

Результаты размещаются в хэше %phl_join, ключами которого являются имена создаваемых процессов/потоков. Если при обращении за результатом нужные параллельные процессы ещё не завершились, программа ждет их завершения.



 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 %>

• Дополнительные ключи

При желании можно определить свои собственные (дополнительные) ключи или переопределить существующие. Это реализуется с помощью специально оформленных модулей.

Так, к примеру, с помощью модуля 'HTML::Phl::Utilit' и ключа '-import' [ '-im' ] можно просмотреть список всех указателей, ключей и параметров, в данный момент доступных программе.

Пример:

 1 %pl -ev use HTML::Phl::Utilit;
 2 
 3 %pl -import



22241