使我的文件以 Perl 或 HTML 可读

Posted

技术标签:

【中文标题】使我的文件以 Perl 或 HTML 可读【英文标题】:make my file readable as either Perl or HTML 【发布时间】:2011-01-25 06:57:14 【问题描述】:

本着“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 ...

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

我用 Perl cmets 和 HTML cmets 尝试了各种技巧,但不能让它非常完美。文件作为一个整体不必是“严格合法”的 HTML(尽管嵌入的文档应该是)......只是可以在浏览器中显示,而没有(或最少)可见的 Perl 垃圾。

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

【问题讨论】:

我认为您的解决方案集是空集。如果您打算通过 shbang 将 perl 与文件关联,那么您需要第一行。 SGML 注释不能出现在此行之前,因此您将显示 shbang——大多数浏览器会将其作为自己的文档放置——即使它生成非标准 HTML。 只需添加一些 javascript 即可从 DOM 中删除 shebang! @Axeman,见下面的空集;) 【参考方案1】:

阅读它并为@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 ...

# -->

【讨论】:

巧妙的把戏。尽管我仍然建议不要这样做。你真的应该在不同的地方有不同的东西。 我赞扬你的聪明才智。 +1 令人敬畏的骇人听闻。但是,对于生产代码或任何其他可维护性甚至是次要问题的情况,我仍然认为使用模板(正如我昨天提交的答案中所建议的那样)从长远来看会给你带来更少的痛苦。【参考方案2】:

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

【讨论】:

【参考方案3】:

也许这是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

那么页面应该渲染得很好。

【讨论】:

【参考方案4】:

在我看来,您需要一个模板解决方案,例如 Template::Toolkit 或 HTML::Template。在您的代码中嵌入 HTML 或在您的 HTML 中嵌入代码是一个痛苦的秘诀。

【讨论】:

【参考方案5】:

您是否考虑过将 Perl 放入 HTML 中?

像ASP4 一样吗?

这样会更容易很多 - 相信我 ;-)

【讨论】:

显然 Template::Refine 是最好的方法 ;) 有趣...不... 太棒了

以上是关于使我的文件以 Perl 或 HTML 可读的主要内容,如果未能解决你的问题,请参考以下文章

perl 中的相对文件路径

如何使我的 php 项目像 .exe 文件一样可分发

在Perl中有个if语句为if (-e "$dir/$_),其中$dir是某个目录,$_已取得$dir目录下的文件。

如何使用 Perl 使我的数据库处于版本控制之下?

需要一些帮助来创建一个 cmake 文件以使我的项目正常工作...从 cmake 转换

可以使用markdown文件中链接打开本地文件吗