Perl 中多行注释的常见解决方法是啥?

Posted

技术标签:

【中文标题】Perl 中多行注释的常见解决方法是啥?【英文标题】:What are the common workarounds for multi-line comments in Perl?Perl 中多行注释的常见解决方法是什么? 【发布时间】:2011-04-06 06:08:09 【问题描述】:

This RFC 提及

与许多编程语言不同,Perl 目前没有实现真正的多行 cmets。这以及常用的解决方法可能会出现问题。这可以通过添加一种新语法来解决,以允许 cmets 跨越多行,就像下面引用的 here-documentation 的变体一样。

常见的解决方法有哪些?

我发现here 的两种技术是

if (0) 
  <comment>

=pod
<comment>
=cut

这些可以安全使用吗?还有其他更好的吗?

【问题讨论】:

为什么一开始就把#放在每行的开头被认为是繁重的?许多编辑器可以很容易地使用宏(或等效的)来做到这一点…… 不要在 Perl 6 RFC 中投入太多。拉里拒绝了其中的大多数。 【参考方案1】:

“if”解决方案的缺点是注释掉的代码仍需编译(因此仍需进行语法检查)。

您的 pod 解决方案的缺点是您的 cmets 将出现在从 pod 生成的任何文档中。

我使用不存在该问题的 pod 解决方案版本。 Pod 支持 =begin format ... =end 由特定格式化程序处理的格式段落。我只是发明了一种我使用的任何格式化程序都无法处理的“评论”格式。

=begin comment

This is ignored by everything

=end comment

更新:

我错过了示例中的一个重要部分。您需要使用 =cut 结束 pod 部分。这是一个完整的例子。

#!/usr/bin/perl

print "This line is executed\n";

=begin comment

print "This line isn't\n";

=end comment

=cut

print "This line is\n";

【讨论】:

真的有必要在答案中保留第一个(不满意的)版本吗?我认为它不会为解决方案添加任何内容。您能否编辑您的答案并将其删除,以便人们立即看到正确的解决方案?谢谢!【参考方案2】:

Perl 文档在perlfaq7 中告诉您如何操作。它非常安全,而且由于我们可以使用 Pod 来完成,所以我们不需要额外的语法来完成它:


如何注释掉一大段 perl 代码?

您可以使用嵌入式 POD 将其丢弃。附上你想要的块 在 POD 标记中注释掉。 =begin 指令将一个部分标记为 特定的格式化程序。使用没有格式化程序的“评论”格式 应声称了解(按政策)。用 =end.

   # program is here

   =begin comment

   all of this stuff

   here will be ignored
   by everyone

   =end comment

   =cut

   # program continues

pod 指令不能随处可见。你必须放一个豆荚 解析器期望新语句的指令,而不仅仅是在 表达式或其他任意语法产生式的中间。

更多详情请见perlpod。

【讨论】:

【参考方案3】:

虽然不规范,但我只是用

=ignore 

sub blah  ... 
my $commented_out_var = 3.14;

=cut

它也能正常工作,并提醒我它不是 POD。

旁白:有趣的是,POD 为我们提供了一个灵活的框架,用于包含不应被视为代码的各种区域,并指定该区域的含义。显然,我们“注释掉”是因为 cmets 以这种方式工作。然而,从术语中可以清楚地看出 cmets 是文字,而不是指令。文件不是改动。

【讨论】:

【参考方案4】:

具有“评论区”功能的编辑器。

例如,科莫多编辑。我很确定 Eclipse 和 JEdit 也能做到这一点,但我没有方便检查它们。

该功能通常会在所选区域中每行的开头插入一个“注释此行”符号。它的好处是不会与现有的 cmets 冲突(如果您在大多数语言中包装包含多行注释的区域,则会有风险)

【讨论】:

例如?我使用vim 哪个supports only C/C++/Java comments。 带有 perl-support 插件的 Vim 使用 =pod/=cut 方法。 vim.org/scripts/script.php?script_id=556 github.com/petdance/vim-perl 或简单的upgrade to Vim 7.3。 @Lazer:在 vim 中一次编辑多行非常容易,在 gvim 中更容易。只需进入视觉高亮模式,选择一个范围,插入文本,然后 .【参考方案5】:

这也有效:

q^
   This is another way to 
   add multi-line comments
   to your code
^ if 0;

【讨论】:

【参考方案6】:

我最喜欢的多行评论设备是__END__

print "Hello world\n";

__END__

The script has ended. Perl does not treat this part of the file as code.

I can put whatever I want down here. Very handy.

【讨论】:

@FM:你是如何在 Perl 中使用它的? @Lazer: __END__ 记录在 perldoc perlmod 中——您可能需要考虑在 perldoc 站点上花费更多时间并熟悉其文档(以及学习Perl 书)。【参考方案7】:

除了

=begin comment

multi-paragraph comments here

=end comment

=cut

form in other answers,你也可以这样做:

=for comment
this is a single pod paragraph comment do
not put extra blank lines after =for.  the
comment ends after the first blank line and
regular pod continues until =cut

Hello! C<Yay!>

=cut

评论段落不会出现在 pod 输出中,而是 Hello "Yay!"会的。

【讨论】:

【参考方案8】:

一个特殊的用例是注释掉几行代码。但是,如果您使用版本控制系统,您可以删除不需要的代码,而不用将其注释掉,如果您需要它,只需获取旧版本即可。

【讨论】:

【参考方案9】:

类似的东西也可以:

q
my comment
;

这是我猜想在运行 Perl 时计算的表达式。

【讨论】:

我喜欢这种简单的方法,但我收到以下警告:Useless use of a constant in void context 你害怕警告吗?【参考方案10】:

我使用这种方式并为我工作

=head

"your code to comment
monkey
banana"

=cut

【讨论】:

【参考方案11】:

又一个有用的方法!


=begin GHOSTCODE

whatever you want to uncomment

=end GHOSTCODE

=cut

【讨论】:

【参考方案12】:

这不是 Perl 的语法方式,但在大多数编辑器(如 Notepad++)中,您可以突出显示要注释掉的代码,然后按 CTRL+K。要删除 cmets,您可以突出显示它们并按 CTRL+Shift+K。

【讨论】:

选择所需的行,然后按CTRL+Q。这将切换 cmets onoff

以上是关于Perl 中多行注释的常见解决方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

access sql中的注释是啥字符

如何在 Perl 中输入多行注释? [复制]

从 Perl 中的哈希中获取具有最高值的键的最简单方法是啥?

在 Perl 中打开和读取文件的最佳方法是啥?

python多行注释是啥?

CustomActionData 用分号分隔,导致字符串溢出 - 此解决方案的常见解决方法是啥?