使我的文件可读为Perl或HTML

Joe*_*Fan 5 html perl comments

本着" Perl Preamble " 的精神,无论是由shell脚本解释器还是Perl解释器执行,脚本都能正常工作......

我有一个Perl脚本,其中包含一个嵌入的HTML文档(作为"heredoc"),即:

#!/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 ...
Run Code Online (Sandbox Code Playgroud)

我希望能够处理Perl脚本中的HTML并使用Web浏览器检查它,并且只在HTML是我想要的方式时才运行脚本.为此,我需要将文件作为HTML文件和Perl脚本打开.

我已经尝试了Perl评论和HTML评论的各种技巧,但无法让它变得非常完美.整个文件不必是"严格合法的"HTML(尽管嵌入的文档应该是)...只能在没有(或最小)Perl垃圾可见的浏览器中显示.

编辑:解决了!看看我自己的答案

Joe*_*Fan 6

阅读并哭泣@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 ...

# -->
Run Code Online (Sandbox Code Playgroud)

  • 我很赞赏你的聪明才智. (4认同)
  • +1令人敬畏的hackishness.但是,对于生产代码或任何其他可维护性甚至是次要问题的情况,我仍然坚持认为使用模板(正如我昨天提交的答案中所建议的那样)从长远来看会让你痛苦得多. (3认同)
  • 干净的把戏.虽然我仍然会反对它.你应该在不同的地方分开. (2认同)

Ign*_*ams 5

这听起来像是痛苦的道路.考虑将HTML存储在单独的文件中并在脚本中读取它.


mob*_*mob 5

也许这是一份工作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>
Run Code Online (Sandbox Code Playgroud)

您也可以删除该use Markup::Perl行并运行您的脚本

perl -MMarkup::Perl my_page_with_embedded_perl.html
Run Code Online (Sandbox Code Playgroud)

然后页面应该渲染得很好.