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 中更容易。只需进入视觉高亮模式,选择一个范围,插入文本,然后 这也有效:
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 on 和 off。以上是关于Perl 中多行注释的常见解决方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章