这个RFC提到了
与许多编程语言不同,Perl目前没有实现真正的多行注释.这和常用的变通方法可能会有问题.这可以通过添加新语法来解决,以允许注释跨越多行,例如下面引用的文档中的变体.
有哪些常见的解决方法?
我在这里找到的两种技术是
if (0) {
<comment>
}
Run Code Online (Sandbox Code Playgroud)
和
=pod
<comment>
=cut
Run Code Online (Sandbox Code Playgroud)
这些可以安全使用吗?还有其他更好的工作吗?
Dav*_*oss 34
"if"解决方案的缺点是注释掉的代码仍然需要编译(因此仍然必须进行语法检查).
pod解决方案的缺点是您的注释将出现在从pod生成的任何文档中.
我使用的pod版本没有那个问题.Pod支持=开始格式... =由特定格式化程序处理的结束格式段落.我只是发明了一种"注释"格式,这种格式不是由我使用的任何格式化程序处理的.
=begin comment
This is ignored by everything
=end comment
Run Code Online (Sandbox Code Playgroud)
更新:
我错过了我的例子的一个重要部分.您需要使用= 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";
Run Code Online (Sandbox Code Playgroud)
bri*_*foy 15
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
Run Code Online (Sandbox Code Playgroud)
pod指令不能只在任何地方.您必须在解析器期望新语句的位置放置pod指令,而不仅仅是在表达式或其他任意语法生成的中间.
有关详细信息,请参阅perlpod.
Axe*_*man 10
虽然它不标准,但我只是使用
=ignore
sub blah { ... }
my $commented_out_var = 3.14;
=cut
Run Code Online (Sandbox Code Playgroud)
它同样有效,并提醒我它不是POD.
具有"注释区域"功能的编辑器.
例如,Komodo Edit.我很确定Eclipse和JEdit也可以这样做,但我没有方便检查它们.
该功能通常在所选区域的每一行的开头插入"注释此行"符号.它具有不与现有注释冲突的好处(如果在大多数语言中包装包含多行注释的区域,则存在风险)
这也有效:
q^
This is another way to
add multi-line comments
to your code
^ if 0;
Run Code Online (Sandbox Code Playgroud)