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

Laz*_*zer 30 perl comments

这个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)

  • 如果只有这个可以在没有= cut的情况下工作. (3认同)
  • 是否真的有必要在答案中保留第一个(不满意的)版本?我认为它不会给解决方案增加任何东西.您可以编辑您的答案并将其删除,以便人们立即看到正确的解决方案吗?谢谢! (3认同)

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.

  • 旁白:有趣的是,POD为我们提供了一个灵活的框架,用于包含不应被视为代码的各个区域,指定该区域的含义.很明显,我们"评论出来"因为评论以这种方式起作用.然而,从该术语可以清楚地看出,评论意味着是文字,而不是说明; 文件不是改动.


Que*_*tin 7

具有"注释区域"功能的编辑器.

例如,Komodo Edit.我很确定Eclipse和JEdit也可以这样做,但我没有方便检查它们.

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

  • https://github.com/petdance/vim-perl或只是[升级到Vim 7.3](http://perlbuzz.com/2010/08/vim-73-supports-perl-6.html). (2认同)

Biz*_*rck 5

这也有效:

q^
   This is another way to 
   add multi-line comments
   to your code
^ if 0;
Run Code Online (Sandbox Code Playgroud)