この記事では、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
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 '。
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.最初の終わり
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
• 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 'を使用できます。
- オプションのパラメーター ' exist '( ' ex ')
ドメイン、ファイル、アドレスの存在を確認できます。
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 %>
- オプションのパラメーター ' head '( ' hd ')
ドキュメントのタイトルを取得します
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 '( ' na ')
デフォルトでは、すべての相対リンクは絶対リンクに置き換えられますが、パラメーター ' no_abs 'が指定されている場合、これは起こりません。
%pl include("$file_name", "socket no_abs");
- オプションのパラメーター ' decode '( ' dc ')
' 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 %>
- オプションのパラメーター ' waitpid '( ' wd ')
子プロセスの実行結果を関数 ' 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 %>
- オプションのパラメーター ' no_waitpid '( ' nw ')
ファイルに何かを書き込んだり表示したりしない限り、プロセスの結果は返されません。
1 <%pl 2 include("$file_name", "fork no_waitpid"); 3 include("$file_name", "fork", "no_waitpid"); 4 %>
- 引数 ' JOIN '
子プロセスの実行結果を要求するには、関数 ' 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() 'の呼び出しポイント、プログラム内の任意のポイントの両方に返すか、何も返さずに結果を「忘れる」ことができます。
- オプションのパラメーター ' join '( ' jn ')
スレッドの実行結果はダイヤルピアに戻りますが、親プロセスは実行を一時的に停止し、(作成されたスレッドから)データが受信されるのを待ちます。
1 <%pl 2 $result = include("$file_name", "thread join"); 3 @result = include("$file_name", "thread", "join"); 4 %result = include("$file_name", "thread"); 5 %>
- オプションのパラメーター ' detach '( ' dh ')
スレッドは作成されますが、プロセスのメインスレッドはその中で何が起こるかを知りません。
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
HTML 2
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 = ''
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()' ( )
=>
test: timer = 4
3. timer '-no_timer' '-nt'
4. 'include()'
=> test: timer = 0
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
— sleep 0.2
2
— sleep 0.5
3
— sleep 0.35
• — 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' .
$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' —
'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{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を使用するために少し変更したバージョンをダウンロードできます。