在“Perl Preamble”,其中一个脚本正常工作是否由一个shell脚本解释器或Perl解释器执行的精神...
我有一个Perl脚本,其中包含一个嵌入式的HTML文件(作为“定界符”),即:
#!/usr/bin/perl
... some Perl code ...
my $html = <<'END' ;
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
... more HTML ...
</HTML>
END
... Perl code that processes $html ...
我希望能够在这Perl脚本里面的HTML工作,并检查它使用Web浏览器,只有当HTML是我想要的方式运行的脚本。要做到这一点,我需要的文件都为HTML文件和Perl脚本可打开的。
我曾尝试用Perl的意见和HTML注释各种招数,但不能让它相当完美。该文件作为一个整体并不一定是“严格的法律” HTML(虽然嵌入文档应该是)......只是在浏览器中显示的没有(或最少)的Perl垃圾可见。
编辑:解决了!见我自己的答案
读它哭泣@Axeman先生......我现在向你空集:
</dev/fd/0 eval 'exec perl -x -S $0 ${1+"$@"}' #> <!--
#!perl
... some Perl code ...
my $html = << '<!-- END' ; # -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
... more HTML ...
</HTML>
<!-- END
... Perl code that processes $html ...
# -->
这听起来像疼痛的路径。考虑保存HTML在一个单独的文件和脚本内阅读。
也许这是Markup::Perl
工作:
# don't write this...
print "Content-type: text/html;\n\n";
print "<html>\n<body>\n";
print "<p>\nYour \"lucky number\" is\n";
print "<i>", int rand 10, "</i>\n</p>\n";
print "</body>\n</html>\n";
# write this instead...
use Markup::Perl;
<html><body><p>
Your "lucky number" is
<i><perl> print int rand 10 </perl></i>
</p></body></html>
你也可以删除use Markup::Perl
线和运行脚本像
perl -MMarkup::Perl my_page_with_embedded_perl.html
然后页面应该呈现相当不错。
像你想要一个模板解决方案,如Template::Toolkit或HTML::Template听起来给我。在你的代码中嵌入HTML或在您的HTML中嵌入代码是痛苦的良方。