プレフィックス、名前空間、スキーマ検証、ドキュメント内部で参照される要素ID、混合名前空間の属性を使用して、非常に複雑なXMLドキュメント(METS)を作成する必要があります... XMLで実行できるほとんどすべてのこと。また、ネストされた要素が大量にあるため、開始タグと終了タグを手動で追跡することは困難です。
私が出くわしたことを行うためのいくつかの可能性を研究していますTemplate::Declare
。
概要は、私は参考のためにここに示した例を提供します。
template simple => sub {
html {
head {}
body {
p { 'Hello, world wide web!' }
}
}
};
私の質問は、Perl言語要素に関してここで何が起こっているのかということです。これはどのように有効なPerl構文に変換されますか?たとえば、ここでPerlコンパイラを表す「html」、「head」キーワードなどは何ですか?それは暗黙のサブ宣言ですか?Perlは暗黙のうちに非常に多くのことを実行します(または実行できるようにします)ので、実際に何が起こっているのかわかりません。いくつかの例をコピーして貼り付けるだけではなく、必要なことを実行するために曲げることができることを願っています。実際に自分が何をしているのか知りたいのですが...
誰かがここで私を啓発できますか?
CPANの優れている点は、コードを見るだけでよいことです。これは私が認める少し複雑ですが、これがあなたが探しているものです:
https://metacpan.org/source/ALEXMV/Template-Declare-0.46/lib/Template/Declare/Tags.pm#L525
基本的に、甘い構文はプロトタイプ から来ており&
、サブがコード参照を受け入れていることをPerlに伝えます。{ ... }
ここでハッシュ、彼らはブロックされ、中のものと同じではありませんmap
かgrep
。あなたの例では、それらは一緒にチェーンされています。
プロトタイプのため、括弧とコンマを省略できますが、次のような例を書くこともできます。
template simple => sub {
html(
sub {
head(
sub { },
body(
sub {
p( sub { 'Hello, world wide web!' } );
} ) );
} );
};
これを実装する方法は、直接書き出す場合、次のようになります。
sub template(%) { ... } # the % tells it to expect a hash
sub html(&) { ... }
sub head(&) { ... }
sub body(&) { ... }
sub p(&) { ... }
この種のものは、シンタックスシュガーまたはDSL(ドメイン固有言語)と呼ばれます。
何をしているのかがわかっている場合にのみ、コードでプロトタイプを使用する必要があることに注意してください。たぶん、あなたはそれらを望まないでしょう。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加