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

Модули-расширения  

Для достижения большей гибкости работы в PHL реализована возможность задавать собственные указатели инструкции [sh], ключи [keys], первый аргумент [include] и параметры [param] функции 'include()'.

   <%[sh] [keys]
      ...
      include("[include]", "[param]");
      ...
   %>

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


Для примера в PHL включены 4 модуля:


 1   use HTML::Phl::Utilit;
 2   use HTML::Phl::Psimple;
 3   use HTML::Phl::Php;
 4   use HTML::Phl::Ru;

Модули можно подключить как в файле 'phl.pm' или 'config.phl', так и в файле PHL.

 1 %pl -ev use HTML::Phl::Utilit
 2 
 3 <%pl
 4    # код perl
 5 %>

• Модуль 'HTML::Phl::Utilit'

Модуль экспортирует в программу 5 ключей, 2 параметра и 2 аргумента для функции 'include()'.

[keys] : 
        -listing   <=>  -lt
        -analys    <=>  -as
        -config    <=>  -cf
        -timer     <=>  -tm   
        -no_timer  <=>  -nt   

[param] :
        listing    <=>  lt
        analys     <=>  as

[include] : 
        CONFIG
        TIMER

Ключи '-listing' [ '-lt' ] и '-analys' [ '-as' ] и параметры 'listing' ( 'lt' ) и 'analys' ( 'as' ) дают, возможность просмотреть листинг программы или сформированный анализатором код perl перед его выполнением eval.


Ключ '-listing' [ '-lt' ]

 1 Текст HTML 1
 2 <br><br>
 3 
 4 <%pl -lt
 5    my $test = "Текст Perl<br>";
 6    print "$test";
 7 %>
 8 <br>
 9 
 10 Текст HTML 2


Ключ '-analys' [ '-as' ]

 1 %pl -as
 2 
 3 <%pl
 4    my $test = "Текст Perl<br>";
 5    print ("$test");
 6 %>
 7 
 8 Текст HTML и <%pl= $test %>


Ключ '-config' [ '-cf' ] или аргумент 'CONFIG' функции 'include()' выводят на печать хэш %phl конфигурационных переменных.


 1 %pl -config
 2 
 3 или так
 4 
 5 <%pl
 6    include("CONFIG");
 7 %>



Ключи '-timer' [ '-tm' ] и '-no_timer' [ '-nt' ] позволяют изменить механизм вывода на экран временных промежутков работы компонентов программы, а используя аргумент 'TIMER' функции 'include()' можно задать свой таймер.


 1 <%pl
 2 # запуск встроенного таймера
 3 %pl -timer
 4 
 5 # остановка встроенного таймера
 6 %pl -nt
 7 %>


 1 <%pl
 2   # пример создания своего таймера
 3   include("TIMER", "имя таймера");
 4 %>


• Модуль 'HTML::Phl::Php'

Экспортирует указатель 'php', превращая указатель инструкции '<%pl' в '<%php', для возможности работы с кодом языка программирования PHP;


 1 %pl -ev use HTML::Phl::Php;
 2 
 3 %pl our $pl = 5;
 4 
 5 Исходная переменная PERL: $pl = <b>'<%pl= $pl %>'</b>.
 6 <br><br>
 7 
 8 <%php
 9    echo "Значение переменной \$pl передаем в PHP (\$pl -> \$php).<br>";
 10    OUT_PERL($pl -> $php);
 11  
 12    echo "<li>переменная \$php = $php.</li><br>";
 13 
 14    echo "В PHP изменяем значение переменной: \$php = 2 * \$php + 1.5.<br><br>";
 15    $php = 2 * $php + 1.5;
 16 
 17    echo "Возвращаем значение переменной \$php в PERL (\$php -> \$pl).<br>";
 18    IN_PERL($php -> $pl);
 19 %>
 20 
 21 <li>Результирующая переменная PERL: $pl = <b>'<%pl= $pl %>'</b></li>.


• Модуль 'HTML::Phl::Ru'

Экспортирует указатель 'рус', превращая указатель инструкции '<%pl' в '<%рус', позволяя работать с некоторыми функциями и операторами кириллического написания.


 1 %pl -ev use HTML::Phl::Ru;
 2 
 3 <%рус
 4   my @имена_файлов = (
 5     'file_exist.phl',
 6     'http://www.pushkinmuseum.ru',
 7     'http://www.pushkinmuseum.ru/467899',
 8     'http://eklmn12344556778.ru'
 9   );
 10  
 11   foreach my $имя_файла (@имена_файлов) {
 12     my $найдено = ВКЛЮЧИТЬ("$имя_файла", "socket exist");
 13     ЕСЛИ ($найдено) {
 14          ПЕЧАТЬ "'$имя_файла' - <B>найден</B><br>";
 15     } ИЛИ ЕСЛИ (!defined $найдено) {
 16          ПЕЧАТЬ "'$имя_файла' - <B>не отвечает</B><br>";   
 17     } ИНАЧЕ {
 18          ПЕЧАТЬ ("'$имя_файла' - <B>не найден</B><br>");
 19     }
 20   }
 21 %>


• Модуль 'HTML::Phl::Psimple'

Экспортирует параметр 'Simple' ['sl'] для работы со стандартным модулем Perl 'LWP::Simple';


Спецификация модулей-расширений

Для возможности экспорта ключей, параметров и указателей модули должны размещаться в определенной папке (по умолчанию - в 'Phl', находящейся рядом с основным файлом программы 'phl.pm') и содержать двумерный хэш '%phl_import', в котором ключами второго хеша будут экспортируемые ключи, параметры и указатели.

Хэш '%phl_import' может включать 5 ключей - 'sh', 'key', 'param', 'include' и 'eval'.


 1    our %phl_import = (
 2       key    => {
 3                   tm    => \&HTML::Phl::Utilit::key_timer,
 4                   im    => \&HTML::Phl::Utilit::print_import,
 5                 },
 6       include => {
 7                   TIMER  => \&HTML::Phl::Utilit::my_timer,
 8                   CONFIG => \&HTML::Phl::Utilit::config,
 9                 },
 10       param   => {lt    => \&HTML::Phl::Utilit::open_listing},
 11       sh      => {'рус'  => \&HTML::Phl::Ru::ru_perl},
 12       eval    => {as    => \&HTML::Phl::Utilit::eval_code}
 13    );

○ Ключ хэша 'sh'

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

К примеру, наряду с использованием конструкции '<%pl ... %>' для Perl-кода можно задать блоки инструкций вида '<%xml ... %>' для кода XML.

Значением ключа хэша 'sh', в таком случае, должен являться анонимный хэш, ключом которого будет новое расширение (в нашем случае - 'xml'), значением - ссылка на подпрограмму обработки кода, заложенного в инструкции (к примеру '\&HTML::Phl::Name_module::my_xml').

В подпрограмму в таком случае, будут переданы следующие элементы @_ = ($code, $sh, $nota, $key),
где
$code - код, заключенный внутри инструкции;
$sh - наше новое расширение инструкции;
$nota, $key - разделитель и ключи блока инструкции (при их наличии).

Подпрограмма модуля должна вернуть обратно в программу измененный perl-код для дальнейшего его выполнения eval.


○ Ключ хэша 'key'

Позволяет использовать ключи, отличные от используемых по умолчанию.

Если анализатор среди ключей инструкций найдет ключ, соответствующий ключу анонимного хэша 'key', в подпрограмму, указанную в анонимном хэше, будет передан массив @_ = ("$code", "$number_blok", "$key"),
где $number_blok - номер блока инструкции.


○ Ключ хэша 'param'

Позволяет использовать свои параметры в функции 'include()'.

В подпрограмму, указанную в анонимном хэше, будет передан массив @_ = ("$file_include", "$param", "$name_process", "$file_url", "$file_name"),
где
$file_include - первый аргумент функции 'include()';
$param - параметры, указанные в 'include()';
$name_process - имя дочернего процесса или потока (нити) ;
$file_url - путь к файлу, включающий доменное имя;
$file_name - имя файла, выделенное из $file_include.


○ Ключ хэша 'include'

Позволяет перехватить выполнение функции 'include()', передав управление модулю.

В подпрограмму, указанную в анонимном хэше, будет передан массив @_ = ("$include", "$param", "$name_process", "$file_url", "$file_name"),
где
$include - первый аргумент функции 'include()'.

○ Ключ хэша 'eval'

Позволяет выполнять манипуляции с кодом перед его выполнением eval.

В подпрограмму, указанную в анонимном хэше, будет передан массив @_ = ("$code", "$param", "$phl_var{name}", "$file_include").




31163