HTML::Template でこれを行う方法はありますか?
これまた?;) いいえ、必要なことを行うには、DOM を読み取って操作する必要があります。HTML::Template は、特定のタグ/マーカーでのみ機能します。変数に格納$template->output()
します。Mojo::DOMなどのパーサーで変数を読み取り、フォームのインスタンスを見つけてコンテンツを追加します。次の例は、ソリューションを示しています。
#!/usr/bin/perl
use strict;
use warnings;
use Mojo::DOM;
# fake output of $template->output;
my $html = << 'HTML';
<html>
<head>
<title>test</title>
</head>
<body>
<form method="post">
<input type="text" id="name">
</form>
</body>
</html>
HTML
# you say you want to parse this from CGI
my $value ='foo';
# what you want to add
my $addme = "<input type='hidden' value='$value'>";
my $dom = Mojo::DOM->new();
$dom->parse( $html )->at('form')->child_nodes->first->append( $addme )->root;
print $dom;
プリント:
<html>
<head>
<title>test</title>
</head>
<body>
<form method="post">
<input type="hidden" value="foo"><input id="name" type="text">
</form>
</body>
</html>
編集。
テンプレート内で何を行っているかはわかりませんので、最も健全な方法は、既存のコードの出力に基づいて変更を行うことです。つまり、現在テンプレートの出力を印刷する前に、上記に示したメソッドを安全に追加できます。foo
1 回限りの更新として指定されたコードを使用して、変更を実際にテンプレートに書き戻すことができ、HTML::Template パラメータではなく値を使用できます。