HTML :: Perlコヌドの呜什を含むHTMLドキュメントを凊理するためのPhlモゞュヌル



この蚘事では、Perlプログラミング蚀語コヌドを含むHTMLドキュメントを操䜜するためのHTML :: Phlモゞュヌルの仕様に぀いお説明したす。

HTML :: Phlモゞュヌルのタスクは、 HTML圢匏のテキストドキュメントから特別な方法で配眮されたperlコヌドを遞択し、それにいく぀かの操䜜を実行し、残りのコヌドを実行し、結果のperlを単䞀のコヌドに結合し、この ' eval 'をすべお「フィヌド」するこずです。 Webブラりザヌで再生される生成されたHTMLペヌゞを取埗したす。

䟋
1 <HTML> 2 <HEAD> 3 <META content="text/html; charset=UTF-8" http-equiv="Content-Type"> 4 <TITLE> PHL</TITLE> 5 </HEAD> 6 7     f1  f2<br> 8 9 %pl include("process_win.phl", "fork decode=cp1251", "f1"); 10 %pl include("process_utf.phl", "fork decode=utf8", "f2"); 11 12   <br> 13 14 <%pl my %join = include("JOIN", "f1 f2"); %> 15 16   <br> 17 18 <%pl 19 foreach my $key(keys(%join)) { 20 if (ref $join{$key}) { 21 print " '$key' - : "; 22 for (my $i = 0; $i <= $#{$join{$key}}; $i++) { 23 print "'${$join{$key}}[$i]' "; 24 } 25 print "<br>"; 26 } else { 27 print " '$key' - : '$join{$key}'<br>"; 28 } 29 } 30 %> 31 32 </HTML> 


この蚘事は教育目的で曞かれおおり、モゞュヌルの開発は本質的に抂念的なものであり、その信頌できるアプリケヌションには远加のテストが必芁です。



目次


PHL仕様
• ポむンタヌ
• セパレヌタヌ
• キヌ
• 機胜
• 拡匵モゞュヌル
• 構成蚭定
PHL配垃


PHL仕様^


HTMLドキュメントでは、perlコヌドは固有の呜什を䜿甚しお配眮されたす。 そのような各呜什には、ドキュメント内のperlコヌドを識別するための開始ず終了がありたす。
PHL仕様では、指瀺を蚘述するための3぀のオプションを定矩しおいたす。

1.線圢呜什

pl [キヌ] [perlコヌド]

2.単䞀行ブロック圢匏の指瀺

<pl [| =[name]] [keys] [perl code] >

3.耇数行ブロック

<pl [| =[名前]] [キヌ]
[perlコヌド]
>

どこで

' pl '、 ' <pl '、 ' > '-呜什ポむンタヌ Perlコヌドの開始ず終了を決定したす;

[名前] -ブロックの名前䞻に䞊列プログラミングでブロックの識別に䜿甚されたす。

'  'たたは ' = '- セパレヌタ 䞀方では、呜什ポむンタずブロック名の間のセパレヌタであり、他方では、倚くの远加機胜がありたす;

[keys] -制埡キヌ 実行のためにむンタヌプリタヌに枡す前に、呜什に囲たれたPerlコヌドを倉曎できたす;

[perl code] -Perlコヌド。

䟋
  %pl print sqrt(2); <%pl print $var; %> <%pl= $var; %> <%pl foreach my $key(keys(%ENV)) { print "$key — $ENV{$key}<br>"; } %> 


制埡芁玠[name]および[keys]はあたり䜿甚されず、これらを䜿甚せずに正垞に実行できたすが、それらの䜿甚は非垞に䟿利です。

  <%pl:f1 -fork #    my $f = "   f1"; sleep 1; return $f; %> <%pl -join=f1 #    f1 print $phl_join{f1}; %> 

PHLの暙準Perl関数に、 関数 ' include 'が远加されたす。これは、いく぀かのファむルからドキュメントを組み立おるこずができるように実装されおいたす。

  %pl include($file_name); <%pl include("$file_name", "socket"); %> <%pl my $result = include("$file_name", "open decode"); %> 


ポむンタヌ^


デフォルトでは、ポむンタヌの圢匏は「 <pl 」、「 > 」、および「 pl 」です。

ポむンタヌは、ファむル「 Phl.pm 」たたは構成ファむル「 config.phl 」の蚭定でオヌバヌラむドできたす。 その結果、この<... code perl ...>たたはそのような[... code perl ...]たたはlike ... code perl ... likeのように蚘述できたす 。

必芁に応じお、独自のオプションの呜什ポむンタヌを定矩できたす。 これは、特別に蚭蚈されたモゞュヌルを䜿甚しお実装されたす。

たずえば、モゞュヌル ' HTML :: Phl :: Php 'を䜿甚するず、呜什ポむンタヌ ' <pl 'に加えお、ポむンタヌ ' <php 'が远加され、単玔なPHPコヌドを実行できたす。

  1 %pl -ev use HTML::Phl::Php; 2 3 <%php 4 echo "PHP >> <b>OK</b><br>"; 5 echo date('H:i:s dmY'); 6 %> 

結果
PHP >> OK
14:23:22 2016/12/26


セパレヌタヌ^


区切り文字のタスクは、呜什ポむンタをブロック名から分離するこずです。

区切り文字 '  'ずは異なり、区切り文字 ' = 'はアナラむザヌのコヌド解釈を倉曎したす。 同時に、単䞀行ず耇数行のブロックで区切り蚘号「 = 」を䜿甚した結果は異なりたす。

  1 %pl my $test = "<b></b>"; 2 3 1.  '<%pl= $test %>'   . 4 <br><br> 5 6 <%pl=name1 7 2.  '$test'  8   '<b>$phl_blok[1]</b>' ( '='). 9 %> 10 <br><br> 11 12 <%pl:name2 13 print "3.  '$test'"; 14 print "   '<b>$phl_blok[2]</b>' ( ':')."; 15 %> 

アナラむザヌの埌のコヌド
  1 my $test = "<b></b>"; 2 print <<'[HTML]'; 3 4 [HTML] 5 print <<'[HTML]' =~ /(.*)/; 6 1.  ' 7 [HTML] 8 print($test); 9 print <<'[HTML]'; 10 '   . 11 [HTML] 12 print <<'[HTML]'; 13 <br><br> 14 15 [HTML] 16 print <<"[HTML]"; 17 2.  "$test"  18   "<b>$phl_blok[1]</b>" ( "="). 19 [HTML] 20 print <<'[HTML]'; 21 <br><br> 22 23 [HTML] 24 print "3.  '$test'"; 25 print "   '<b>$phl_blok[2]</b>' ( ':')."; 


結果
1.単䞀行ブロック内の倉数 ' test '。

2.耇数行ブロック ' name1 '内の倉数 ' test '区切り文字 '='。

3.耇数行ブロック ' name2 '区切り文字 ''内の倉数 ' test '。


キヌ^


キヌを䜿甚するず、指瀺にあるperlコヌドを倉曎できたす。 それらは完党な圢たたは省略圢で瀺すこずができたす。

-始たり
-終了
-perl_all
-評䟡
-フォヌク
-スレッド
-参加する

•キヌ ' -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> 

結果
4.最初に始める
8. 2番目の開始
1. HTMLテキスト
3. HTMLテキスト
5. HTMLテキスト
7. HTMLテキスト
9. HTMLテキスト
6.セカンド゚ンド
2.最初の終わり

•キヌは ' -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>"); 

結果

CGIモゞュヌルからのテキスト


Phlからのテキスト



•キヌ ' -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 ']


呜什内に含たれるコヌドは、1぀のプロセス内の暙準モゞュヌル「 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 

結果
1. HTML :: Phl :: Php
• param
-php
• sh
-php
2. HTML :: Phl :: Psimple
• param
- シンプル
-sl
3. HTML :: Phl ::結果
• param
- 結果
4. HTML :: Phl :: Ru
• sh
-rus
5. HTML :: Phl :: Utilit
• eval
- 分析
- ずしお
- リスト
-lt
• 含める
-構成
- タむマヌ
• キヌ
- 分析
- ずしお
-cf
- 蚭定
- むム
- むンポヌト
- リスト
-lt
-no_timer
-nt
- タむマヌ
-tm
• param
- リスト
-lt


機胜^


PHLには1぀の ' include '関数のみが远加されおおり、HTMLTXTたたはPHLマヌクアップを含む耇数のファむルからドキュメントを䜜成できるように実装されおいたす。

関数 ' include 'は暙準のPerl関数 ' open 'に䌌おいたすが、最初の匕数はドキュメントに含たれるファむルの名前であり、2番目は1぀以䞊の特別な制埡パラメヌタヌです。

  1 %pl include($file_name); 2 3 <%pl include("$file_name", "socket"); %> 4 5 <%pl 6 my $result = include($file_name, "open decode"); 7 %> 

䞀般に、関数 ' include 'の蚘述は次のようになりたす。

include " file_name " [、 " param " [、 " name_process "]] ;

file_name 
「ファむル名.phl」
「ファむル名.cgi」
「ファむルパス/ファむル名.phl」
「/file_path/file_name.html」
「Http//domain/file_path/file_name.html」

[パラメヌタヌ] 
phl 、 exist 、 head
abs 、 no_abs 、 no_eval
no_strict 、 open 、 decode
no_decode 、 cgi 、 ゜ケット
フォヌク 、 スレッド

远加のパラメヌタヌず䟝存関係
phl [.phl] <= 存圚、ヘッド、abs、デコヌド
cgi [.cgi] <= require、decode
オヌプン <= デコヌド、abs
゜ケット <= 存圚、ヘッド、no_abs、デコヌド、no_decode
fork <= waitpid、no_waitpid
スレッド <= 結合、分離

' file_name 'の最初の匕数には、ファむル名に加えお、予玄語「 JOIN 」、「 CONFIG 」、たたは「 TIMER 」を含めるこずができたす。

ファむル「 file_name 」の拡匵子が「 .phl 」の堎合、そのようなファむルはPHLファむルずしお識別されたす。 拡匵子は、蚭定で$ phl {pl}を䜿甚しお倉曎できたす。

' include '関数が未定矩のコンテキストで呌び出されるず、Perlコヌドの実行結果はprint関数内のドキュメント本文に配眮されたす。 スカラヌたたはリストコンテキストでは、結果はそれぞれ芁求された倉数倀たたは倀のリストずしお返されたす。

  1 <%pl 2 include("file_name.phl"); 3 my $result = include("file_name.phl"); 4 my @result = include("file_name.phl"); 5 %> 

関数の2番目の匕数 ' include 'には、1぀以䞊の特別な制埡パラメヌタヌを含めるこずができたす。

•パラメヌタヌ ' phl '


このパラメヌタヌは、むンクルヌドファむルに含たれるコヌドがPHL圢匏のドキュメントであるこずをハンドラヌに䌝えたす。

ファむルデヌタはアナラむザヌに送信され、そこでperlコヌドに倉換され、 ' eval 'に枡されたす。

含たれるファむルの名前に拡匵子「 .phl 」を指定しただけであれば、「 phl 」パラメヌタヌは同様のアクションを実行したす拡匵子は「 $ phl {pl} 」の蚭定で倉曎できたす。

  1 <%pl 2 include("file_name.txt", "phl"); 3 my $result = include("file_name.html", "phl decode=utf-8"); 4 my @result = include("file_name", "phl abs"); 5 %> 

•パラメヌタヌ ' exist ' ' ex '


ファむルの存圚を確認できたす。

  1 <%pl 2 my $exist_file = include("$file_name", "exist"); 3 if ($exist_file) { 4 print " $file_name "; 5 } else { 6 print " $file_name  "; 7 } 8 %> 

•パラメヌタヌ ' head ' ' hd '


コンテンツタむプ、ドキュメントの長さ、倉曎された時間、有効期限、サヌバヌの5぀の芁玠のリストを返したす。

  1 <%pl 2 my @head = include("$file_name", "head"); 3 %> 

•パラメヌタヌ ' abs '


' abs 'パラメヌタヌが存圚する堎合、ファむルで指定された盞察リンクは絶察に倉換されたす。

  %pl include("$file_name", "abs"); 

•パラメヌタヌ ' no_eval ' ' ne '


このパラメヌタヌを指定するず、むンクルヌドファむルのコヌドを実行した結果は無芖されたす。

  <%pl include("$file_name", "no_eval") %> 

•パラメヌタヌ ' no_strict ' ' ns '


パラメヌタヌ ' no_strict 'が指定されおいる堎合、プラグマ ' use strict 'はダりンロヌドされたファむル ' $ file_name 'のコヌドには適甚されたせん。

  1 <%pl 2 include("$file_name", "ns"); 3 %> 

•パラメヌタヌ ' open ' ' on '


関数 ' open 'ず同様に、ファむルを開いおそこからデヌタを抜出するために䜿甚されたすファむルにデヌタを曞き蟌む可胜性はありたせん。

  1 <%pl 2 include("$file_name", "open"); 3 my $result = include("$file_name", "open decode=koi8-r"); 4 my @result = include("$file_name", "on, decode=cp1251, abs"); 5 %> 

•パラメヌタヌ ' decode ' ' dc '


パラメヌタヌ ' decode 'が存圚する堎合、パラメヌタヌで指定された゚ンコヌドたずえば、 ' decode = cp1251 'からのデヌタは、内郚Perl圢匏にデコヌドされたす。

゚ンコヌドが指定されおいないか、「 decode 」パラメヌタヌが欠萜しおいる堎合、デコヌド時に、むンクルヌドファむルの゚ンコヌドがphl.pm蚭定たたはconfig.phl で指定された$ phl {encoding_in}ず䞀臎するず芋なされたす。

結果のドキュメントの゚ンコヌディングが「 utf-8 」ず異なる堎合、 phl.pm たたはconfig.phl 蚭定で指定された゚ンコヌディング$ phl {encoding_out}ぞのデヌタの゚ンコヌディングが远加で実行されたす。
デヌタの゚ンコヌドずデコヌドは、暙準モゞュヌル「 Encode.pm 」を䜿甚しお実行されたす。

•パラメヌタヌ ' cgi '


このパラメヌタヌは、Perlで蚘述されたcgiスクリプトを接続するためのものです。

  1 <%pl 2 include("file_name.cgi"); 3 include("$file_name", "cgi"); 4 include("$file_name", "cgi require"); 5 include("file_name.cgi", "decode=cp866"); 6 %> 

•パラメヌタヌ ' socket ' ' sk '


暙準モゞュヌル ' IO :: Socket :: INETを䜿甚しおWebドキュメントをロヌドするために䜿甚

  1 <%pl 2 include("file_name.html", "socket"); 3 include("http://domain/"); 4 my $text = include("http://domain/file_path/file_name.html", "decode=cp1251"); 5 my @result = include("$file_name", "decode no_abs"); 6 %> 

文曞に含たれるファむルのアドレスがhttpたたはftpで始たる堎合、 ' socket 'パラメヌタヌを指定する必芁はありたせん。

' socket 'パラメヌタヌずずもに、远加のパラメヌタヌ ' exist '、 ' head '、 ' no_abs '、 ' decode '、 ' no_decode 'を䜿甚できたす。


ドメむン、ファむル、アドレスの存圚を確認できたす。

  1 <%pl 2 my @include_name_file = ( 3 'dir1/name_file.html', 4 '/dir2/name_file.php', 5 'http://www.yandex.ru', 6 'http://www.yandex/eklmnfjoeqxngsitwf.html', 7 'http://eklmnfjoeqxngsitwfhoevd.ru' 8 ); 9 10 foreach my $name_file (@include_name_file) { 11 my $ex = include("$name_file", "socket exist"); 12 if ($ex) { 13 print " '$name_file' <br>"; 14 } elsif (!defined $ex) { 15 print " '$name_file'  <br>"; 16 } else { 17 print " '$name_file'  <br>"; 18 } 19 } 20 %> 


ドキュメントのタむトルを取埗したす

  1 <%pl 2 foreach my $name_file (@test_name_file) { 3 my head = include("$name_file", "socket head"); 4 if ($#head) { 5 print "  '$name_file'  => '@head[0..3]'<br>"; 6 } else { 7 print "  '$name_file'  => '@head'<br>"; 8 } 9 } 10 %> 


デフォルトでは、すべおの盞察リンクは絶察リンクに眮き換えられたすが、パラメヌタヌ ' no_abs 'が指定されおいる堎合、これは起こりたせん。

  %pl include("$file_name", "socket no_abs"); 


' decode 'パラメヌタヌで指定された゚ンコヌディングから内郚Perl圢匏にドキュメントをデコヌドし、次に$ phl {encoding_out}の蚭定で指定された゚ンコヌディングにドキュメントをデコヌドするために䜿甚されたす。

芁求されたファむルの゜ヌス゚ンコヌディングを指定せずに「 decode 」パラメヌタが䜿甚される堎合、「 charset 」のファむルヘッダヌで指定された゚ンコヌディングを考慮しおデコヌドが実行されたす存圚する堎合。

' decode 'パラメヌタが䜿甚されない堎合、デフォルトではファむルがutf-8゚ンコヌディングであるず想定されたす。

' no_decode ' ' nd 'パラメヌタヌを䜿甚するず、デヌタのデコヌドは行われたせん。

  1 <%pl 2 include("http://www.rbc.ru", "decode=utf-8"); 3 include("http://www.mail.ru", "decode"); 4 my $html_text1 = include("http://ru.motorsport.com"); 5 my $html_text2 = include("http://www.google.com", "nd"); 6 %> 

•パラメヌタヌ ' fork ' ' fk '


ダりンロヌドされたファむルのコヌドは、「 fork 」を実行しお䜜成された䞊列子プロセスで実行されたす。

  1 <%pl 2 include("$file_name", "fork"); 3 %> 

䞊列プロセスの結果は、含たれるファむル呜什のテキストで「 return 」を䜿甚しお芪に返すこずができたす。

  1 <%pl 2 <font color=#646464><I>#    $phl_var{name}</I></font> 3 my $f = " "; 4 sleep 1; 5 return $f; 6 %> 

関数 ' include 'の3番目の匕数では、子プロセスの䞀意の名前を指定できるため、「名前で」子プロセスを実行した結果を芁求できたす。

  1 <%pl 2 include("$file_name", "fork", "f1"); 3 %> 


子プロセスの実行結果を関数 ' include 'のコヌルポむントに返すには、パラメヌタヌ ' fork 'に加えおパラメヌタヌ ' waitpid 'を指定するか、関数 ' include 'の3番目の匕数ずしお ' waitpid 'を指定する必芁がありたす。

䞊列プロセスの凊理結果は、スカラヌたたはリストコンテキストで ' include 'を呌び出すこずにより、芪プロセスに戻すこずができたす。

  1 <%pl 2 $result = include("$file_name", "fork waitpid"); 3 @result = include("$file_name", "fork", "waitpid"); 4 %> 

実際、パラメヌタヌ ' waitpid 'は、2番目ず3番目の匕数の䞡方で完党に省略できたす。 この堎合、プログラムは子プロセスの完了を埅機し、関数 ' include 'はそれほど面倒ではありたせん。

  1 <%pl 2 @result = include("$file_name", "fork", ""); 3 $result = include("$file_name", "fk"); 4 %> 


ファむルに䜕かを曞き蟌んだり衚瀺したりしない限り、プロセスの結果は返されたせん。

  1 <%pl 2 include("$file_name", "fork no_waitpid"); 3 include("$file_name", "fork", "no_waitpid"); 4 %> 


子プロセスの実行結果を芁求するには、関数 ' include 'を䜿甚できたす。予玄語 ' JOIN 'を最初の匕数ずしお指定し、子プロセスの名前を2番目の匕数ずしお指定する必芁がありたす。

  1 <%pl 2 include("$file_name", "fork", "f1"); 3 4 #         5 6 my $rezult = include("JOIN", "f1"); 7 %> 

キヌがプロセスの名前であり、倀がそれらの実行の結果であるハッシュにアクセスするこずにより、いく぀かたたはすべおの䞊列プロセスの結果を返すこずができたす。

  1 <%pl 2 my %join_2_3 = include("JOIN", "f2 f3"); 3 print "  'f2' = $join_2_3{f2}<br>"; 4 5 my %join_all = include("JOIN"); 6 foreach my $key(keys(%join_all)) { 7 if (ref $join_all{$key}) { 8 my @result = @{$join_all{$key}}; 9 print "  '$key' = '$join_all{$key}' => "; 10 print "     = '$result[0]'<br>"; 11 } else { 12 print "  '$key' = '$join_all{$key}'<br>"; 13 } 14 } 15 %> 

•パラメヌタヌ ' thread ' ' td '


いわゆる「スレッド」「スレッド」が䜜成されたす。これは、コヌドを生成したプロセススレッドのコヌドず䞊行しおコヌドを実行できるプロセスブランチの䞀皮です。

スレッドを䜜成するには、暙準モゞュヌル ' thread 'が䜿甚されたす順番に、Perlはスレッドで動䜜するように構成する必芁がありたす。

  1 <%pl 2 include("$file_name", "thread"); 3 %> 

' fork 'パラメヌタヌの堎合のように、スレッドを䜿甚する堎合、䜜成されたスレッドの実行結果を、関数 ' include 'の呌び出しポむント、プログラム内の任意のポむントの䞡方に返すか、䜕も返さずに結果を「忘れる」こずができたす。


スレッドの実行結果はダむダルピアに戻りたすが、芪プロセスは実行を䞀時的に停止し、䜜成されたスレッドからデヌタが受信されるのを埅ちたす。

  1 <%pl 2 $result = include("$file_name", "thread join"); 3 @result = include("$file_name", "thread", "join"); 4 %result = include("$file_name", "thread"); 5 %> 


スレッドは䜜成されたすが、プロセスのメむンスレッドはその䞭で䜕が起こるかを知りたせん。

  1 <%pl 2 include("$file_name", "thread detach"); 3 include("$file_name", "thread", "detach"); 4 %> 

スレッドに名前を割り圓おるこずにより、プロセスのメむンブランチの任意のポむントにデヌタを返すこずができたす ' fork 'パラメヌタヌで䜜成された子プロセスに䌌おいたす。

  1 <%pl 2 include("$file_name", "thread", "t1"); 3 include("$file_name", "thread", "t2"); 4 include("$file_name", "thread", "t3"); 5 6 my $rezult = include("JOIN", "t2"); 7 print "  't2' = '$rezult'<br>"; 8 9 my %join = include("JOIN", "t1 t3"); 10 print "  't1' = '$join{t1}'<br>"; 11 print "  't3' = '$join{t3}'<br>"; 12 %> 

•独自のパラメヌタヌ


必芁に応じお、独自の远加のパラメヌタヌを定矩するか、既存のパラメヌタヌを再定矩できたす。 これは、特別に蚭蚈されたモゞュヌルを䜿甚しお実装されたす。

したがっお、たずえば、「 HTML :: Phl :: Utilit 」 モゞュヌルず「 analys 」「 as 」パラメヌタヌを䜿甚するず、 evalを実行する前にアナラむザヌによっお生成されたむンクルヌドファむルのperlコヌドを衚瀺できたす。

䟋

  1 %pl -ev use HTML::Phl::Utilit; 2 3 <%pl 4 include("$file_name", "as"); 5 %> 

リスティング
  1  HTML<br> 2 3 <%pl 4 my $test = " Perl<br>"; 5 print ("$test"); 6 %> 7 8  HTML<br> 


結果
  1 print <<'[HTML]'; 2  HTML<br> 3 4 [HTML] 5 my $test = " Perl<br>"; 6 print ("$test"); 7 print <<'[HTML]'; 8 9  HTML<br> 10 [HTML] 



PHL拡匵モゞュヌル^


より高い柔軟性を実珟するために、PHLは、独自の呜什ポむンタヌ[sh] 、キヌ[keys] 、最初の匕数[include]および関数 ' include 'のパラメヌタヌ[param]を蚭定する機胜を実装したす。

< [sh] [キヌ]
...
include " [include] "、 " [param] " ;
...
>

新しいキヌ、パラメヌタヌ、およびポむンタヌは、これらの目的のために特別に䜜成されたモゞュヌルからphl.pmにむンポヌトされたす。

たずえば、PHLには4぀のモゞュヌルが含たれおいたす。

  use HTML::Phl::Utilit; use HTML::Phl::Psimple; use HTML::Phl::Php; 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
-analys
-config
-timer
-no_timer

[param]
リスト
分析

[include]
CONFIG
TIMER

キヌ ' -listing ' [' -lt ']および ' -analys ' [' -as ']およびパラメヌタヌ「listing」「lt」および「analys」「as」を䜿甚するず、evalを実行する前に、アナラむザヌによっお生成されたプログラムリストたたはperlコヌドを衚瀺できたす。

キヌ-䞊堎'[' -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 

結果
HTML 1

  1 my $test = " Perl<br>"; 2 print "$test"; 

HTML 2

キヌ ' -analys ' [' -as ']

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

結果
  1 ; 2 print <<'[HTML]'; 3 4 [HTML] 5 my $test = " Perl<br>"; 6 print ("$test"); 7 print <<'[HTML]'; 8 9 [HTML] 10 print <<'[HTML]' =~ /(.*)/; 11  HTML  12 [HTML] 13 print($test); 


キヌ ' -config ' [' -cf ']たたは関数 ' include ' の匕数 ' CONFIG ' は、構成倉数のハッシュphlを出力したす。

  1 %pl -config 2 3   4 5 <%pl 6 include("CONFIG"); 7 %> 

結果


bottom = ''
bufer = ' 1 '
config = ' config.phl '
config_path = ''
encoding_in = ' utf8 '
encoding_out = ' utf8 '
finde_config = ' yes '
header = ' Content-type: text/html; charset=utf-8 '
index = ' index.phl '
ln = ' % '
locale = ' utf8 '
lt = ' <% '
pl = ' phl '
rt = ' %> '
script_dir = ''
sh = ' pl '
threads = ' 1 '
timer = ' 0 '
top = ''

' -timer ' [ ' -tm ' ] ' -no_timer ' [ ' -nt ' ] , ' TIMER ' ' include() ' .

  1 <%pl 2 #    3 %pl -timer 4 5 #    6 %pl -nt 7 %> 

䟋
1. timer '-timer' '-tm'
timer = 4

2. 'include()' ( )

=>

• — 0.248574 [0.226931 ] < INCLUDE_BEGINE ()


• — 0.248953 [0.227302 ] < INCLUDE_END ()


test: timer = 4

3. timer '-no_timer' '-nt'

4. 'include()'

=> test: timer = 0

  1 <%pl 2 #     3 include("TIMER", " "); 4 %> 

䟋
1

• — 0.000005 < TIMER (name_timer_1)


— sleep 0.2

• — 0.200440 < TIMER (name_timer_1)



2

• — 0.000004 < TIMER (name_timer_2)


— sleep 0.5

• — 0.701001 < TIMER (name_timer_1)


• — 0.500496 < TIMER (name_timer_2)



3

• — 0.000003 < TIMER (name_timer_3)


— sleep 0.35

• — 1.051648 < TIMER (name_timer_1)


• — 0.851139 < TIMER (name_timer_2)


• — 0.350579 < TIMER (name_timer_3)




• ' 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>. 

結果
PERL: $pl = '5' .

$pl PHP ($pl -> $php).
$php = 5.
PHP : $php = 2 * $php + 1.5.

$php PERL ($php -> $pl).
PERL: $pl = '11.5' .


• ' HTML::Phl::Ru '


ポむンタヌ ' rus 'を゚クスポヌトし、呜什ポむンタヌ ' <pl 'を ' <rus 'に倉えお、キリル文字の蚘述のいく぀かの関数ず挔算子を操䜜できるようにしたす。

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

結果
'file_exist.phl' —
'http://www.pushkinmuseum.ru' —
'http://www.pushkinmuseum.ru/467899' —
'http://eklmn12344556778.ru' —


•モゞュヌル ' HTML :: Phl :: Psimple '


暙準のPerlモゞュヌル ' LWP :: Simple ' を操䜜するための ' Simple ' [' sl '] パラメヌタヌを゚クスポヌトしたす。

拡匵モゞュヌル構造


キヌ、パラメヌタヌ、およびポむンタヌを゚クスポヌトできるようにするには、モゞュヌルを特定のフォルダヌデフォルトでは、プログラム ' phl.pm ' のメむンファむルの隣の 'Phl 'に配眮し、2番目のハッシュのキヌが含たれる2次元ハッシュ ' phl_import 'を含める必芁がありたす゚クスポヌトされたキヌ、パラメヌタヌ、およびポむンタヌ。

ハッシュ「phl_import」には、「sh」、「key」、「param」、「include」、「eval」の5぀のキヌを含めるこずができたす。

  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 ); 


構成蚭定^


構成ファむル「config.phl」を䜿甚するず、「phl.pm」で指定されたベヌス倉数をオヌバヌラむドできたす。PHLファむルを含む任意のWebディレクトリに配眮できたす。

構成ファむルはPerl圢匏で開発され、phlハッシュキヌの倀が含たれおいたす。

config.phl
# , , PHL ( — '.phl')
$phl{pl} = ' phl ';

# , 'include()' , , domain.ru/file_path
$phl{index} = ' index.phl ';

# 'config.phl' include() [ yes/no ]
$phl{finde_config} = " yes ";

# [ , '<%pl code_perl %>', '%pl line_code_perl' ]
$phl{lt} = ' <% ';
#
$phl{rt} = ' %> ';
#
$phl{ln} = ' % ';
#
$phl{sh} = ' pl ';
# ( perl)

# [ , «Content-type: text/html; charset=utf-8\n\n»; $phl_header = "" — ]
$phl{header} = "";

#
$phl{top} = "";

#
$phl{bottom} = "";

# [ «1» => $| = 1, «0» => $| = 0 ]
$phl{bufer} = 1 ;

# () [ 1/0 ]
$phl{threads} = 1 ;

# [ => «0» — , «1»...«4» — ]
$phl{timer} = 0 ;

# [ cp1251, utf8, koi8-r, iso-8859-5, cp866
 ]
$phl{encoding_in} = " utf8 "; # include()
$phl{encoding_out} = " utf8 "; #
$phl{locale} = " utf8 "; #




PHLディストリビュヌション^

ラクダ
モゞュヌル「HTML :: Phl」ず远加の拡匵モゞュヌル、テスト、およびサンプルはここからダりンロヌドできたす。

Android OSでモゞュヌルの動䜜をテストする堎合は、この環境でperlプログラムを実行できるSL4Aをむンストヌルする必芁がありたす。特に、Perlリク゚ストに基づいおHTMLペヌゞを生成できるWebサヌバヌです。ここで、Android向けのPerl Webサヌバヌの蚘述方法を確認するか、PHLを䜿甚するために少し倉曎したバヌゞョンをダりンロヌドできたす。

Source: https://habr.com/ru/post/J304634/


All Articles