2010-08-31 834 views
26

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

不像很多编程语言Perl并不目前实现真正的多行注释。这和常用的解决方法可能会有问题。这可以通过添加新的语法来解决,以允许评论跨越多行,如下面引用的文档中的变体。

什么是常见解决方法?

两种技术,我发现here

if (0) { 
    <comment> 
} 

=pod 
<comment> 
=cut 

难道这些安全使用?还有其他人能更好地工作吗?

+5

为什么在每一行的开头放一个'#'首先考虑繁重?很多编辑可以很容易地用宏(或等价的)来做到这一点...... – 2010-08-31 14:34:25

+0

不要在Perl 6 RFC中放太多库存。拉里拒绝了他们中的大部分。例如 – 2010-08-31 18:16:57

回答

31

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

您的pod解决方案的缺点是您的评论将出现在由该pod生成的任何文档中。

我使用了没有该问题的pod解决方案版本。 Pod支持=开始格式... =由特定格式化程序处理的结束格式段落。我只是发明了一种“评论”格式,而不是我使用的任何格式化程序处理的格式。

=begin comment 

This is ignored by everything 

=end comment 

更新:

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

#!/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"; 
+3

如果只有这样才能在没有= cut的情况下工作。 – 2010-08-31 15:30:31

+2

真的有必要在答案中保留第一个(不满意的)版本吗?我不认为它增加了任何解决方案。你可以编辑你的答案并将其删除,以便人们立即看到正确的解决方案吗?谢谢! – 2014-08-21 12:23:23

6

具有“注释区域”功能的编辑器。

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

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

+0

?我使用[只支持C/C++/Java评论](http://vim.wikia.com/wiki/Comment/UnComment_visually_selected_text)的'vim'。 – Lazer 2010-08-31 12:27:16

+1

使用perl-support插件的Vim使用= pod/= cut方法。 http://www.vim.org/scripts/script.php?script_id=556 – 2010-08-31 12:32:54

+2

https://github.com/petdance/vim-perl或者干脆[升级到Vim 7.3](http:// perlbuzz。 COM/2010/08/VIM-73 - 载体-perl的-6.html)。 – daxim 2010-08-31 12:43:00

3

我最喜欢的多行注释设备是__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. 
+0

@FM:你如何在Perl中使用它? – Lazer 2010-08-31 12:53:32

+0

@拉泽尔:就像他展示的一样。 – Ether 2010-08-31 15:01:16

+0

@Ether:这是在评论后编辑的。 – Lazer 2010-08-31 17:07:57

9

虽然这是不规范的,我只是用

=ignore 

sub blah { ... } 
my $commented_out_var = 3.14; 

=cut 

它的工作原理一样好,并提醒我,这是不是POD。

  • 另外:POD为我们提供了一个灵活的框架,用于包含不应被视为代码的各个区域,并指定该区域的含义。显然我们“评论事情”,因为评论这样工作。然而,从术语来看,评论意味着语言而不是指示;文件没有改动。
1

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

14

Perl文档告诉你如何在perlfaq7中做到这一点。这是大量的安全,因为我们可以用波德做到这一点,我们并不需要额外的语法来做到这一点:


我怎样才能注释掉的Perl代码块大?

您可以使用嵌入式POD将其丢弃。将您想要的块封装在POD标记中。 指令为特定格式化程序标记了 部分。使用“注释”格式,其中格式化程序 应声明理解(按策略)。用 =end标记块的结尾。

# program is here 

    =begin comment 

    all of this stuff 

    here will be ignored 
    by everyone 

    =end comment 

    =cut 

    # program continues 

pod指令不能去任何地方。您必须在解析器期望新语句的位置放置一个pod 指令,而不仅仅是在表达式或其他任意语法生成的中间位置处的 。

请参阅perlpod了解更多详情。

3

除了在其他的答案中

=begin comment 

multi-paragraph comments here 

=end comment 

=cut 

形式,你也可以这样做:

=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输出,但你好“耶! “将。

4

这工作太:

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

我用这种方式和我的作品

=head 

"your code to comment 
monkey 
banana" 

=cut 
1

喜欢的东西的作品太:

q{ 
my comment 
}; 

这是我猜评估,同时表达运行Perl。

+0

我喜欢这种简单的方法,但我得到以下警告:'在无效的上下文中无用的常量'。 – EverythingRightPlace 2015-04-09 11:11:00

+0

你是否害怕警告? – Aftershock 2015-04-10 20:23:57

0

还有另一种有用的方法!


=begin GHOSTCODE 

whatever you want to uncomment 

=end GHOSTCODE 

=cut 
0

这不是做一个Perl语法的方式,但在大多数编辑器(如记事本++),您可以突出显示要被注释掉,然后按CTRL + K码。要删除注释,可以突出显示它们,然后按CTRL + Shift + K。

+0

选择所需的行,然后按下CTRL + Q。这将切换注释_on_和_off_。 – serenesat 2015-05-28 11:08:48

相关问题