为什么Perl没有更简单的多行注释方式?

6
我知道在Perl中有不同的方法来引入多行注释。但我想知道为什么它没有像/* comment */这样更简单的多行注释功能,这将使它更容易。
我目前遵循http://www.perlmonks.org/?node_id=560985 来实现多行注释。是否有计划在Perl中很快包括此功能?

Perl非常容易阅读,以至于对于每个语句,你实际上需要几行注释来解释! - jdehaan
s(/[*]){=for comment\n\n}; -> s(/[*]){=用于注释\n\n};s([*]/){\n\n=cut\n} -> s([*]/){\n\n=cut\n} - Brad Gilbert
@Brad:那会破坏像s/\s*/ /g这样的代码 :) - bdonlan
1
@bdonlan,我只是想表明已经有一种方法可以创建多行注释。 - Brad Gilbert
4个回答

12

C语言风格的注释存在各种问题,其中之一是无法注释掉注释。此外,方便的单行语法鼓励简洁编写,使您的代码更易于阅读。C和C ++中不时出现的10行“作者:... 输入:... 输出:... 最喜爱的颜色:...”块的缺失是另一个好处。

多行注释鼓励长篇大论的写作,这些可以更简洁地表达或作为文档进行说明,因此这也是Perl用其#=pod运算符(分别)鼓励的。

最后,如果您对Perl的注释风格感到困惑,可以将编辑器配置为编辑程序而不是文本。在Emacs中,如果您开始编写类似于# this is a comment that is getting longer and longer and longer and oh my goodness we are out of space on this line what to do now的内容,并键入M-q,Emacs将自动插入每行开头的#

如果您只想注释掉一段代码块,那么您只需要使用M-x comment-regionM-x uncomment-region即可注释掉几乎所有语言(包括Perl)中的区域。

不要为注释的语法烦恼;这是计算机的工作!


1
我认为你的意思是 M-q,而不是 C-q。 - Sean
2
对于那些站在“神圣编辑器大战”另一边的人来说,vim 也能够自动在注释行的开头插入 #,并且在使用 gq 重新排版文本时也会这样做。 - Dave Sherohman
-1 对你们两个家的诅咒!Padre 解决方案怎么样? - DVK
我仍然觉得 /* */# 或者 =pod 更加方便。可能是因为它对我来说不够直观,或者只是我的个人选择。 - Ravikiran

6

关于这个问题,perl6-language@perl.org邮件列表上进行了讨论。虽然最终没有得出结论,但这里发布的摘要很有意思。


是的,我看到了,仍然不明白为什么他们不会承认它。 - Ravikiran

3

像任何多行注释结构一样,都有“开”和“关”注释条件,这会导致嵌套注释的问题。

例如,C语言使用/*作为开头,*/作为结尾。多行注释系统如何处理嵌套注释?如果您尝试注释已经被注释的块,则C语言将失败。

请注意,基于行的注释(例如c++ //注释)不会遇到这个问题。


0

简洁由看的人决定。话虽如此,已经有多种方法可以进行多行注释。首先,使用空字符串字面量:

q{This text won't do anything.
Neither will this.};

这会不幸地触发一个警告:

Useless use of a constant in void context at - line 4.

另一个选项是在无效上下文中使用heredoc - 出于某种原因,这不会导致警告:
<<ENDCOMMENT;
Foo comment bar.
ENDCOMMENT

正如你所看到的,问题并不是缺乏语法(实际上,Python文档注释看起来与q{}方法相似)- 更多的是Perl程序员社区已经采用使用#和POD进行行注释。在这个时候使用不同的方法只会让那些后来需要阅读你的代码的人感到困惑。


8
请在实际编码中永远不要这样做。代码的目标是易读性,而不是“我无法弄清楚如何使用我的文本编辑器,所以去你的吧”。 - jrockway

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接