Каковы обходные пути для многострочных комментариев в Perl? - PullRequest
30 голосов
/ 31 августа 2010

В этом RFC упоминается

В отличие от многих языков программирования, Perl в настоящее время не поддерживает настоящие многострочные комментарии. Это и обходные пути, которые обычно используются , могут быть проблематичными. Эту проблему можно решить, добавив новый синтаксис, позволяющий комментариям занимать более одной строки, как показано в приведенной ниже вариации документации.

Каковы общие обходные пути?

Две техники, которые я нашел здесь

if (0) {
  <comment>
}

и

=pod
<comment>
=cut

Безопасны ли они для использования? Есть ли другие, которые работают лучше?

Ответы [ 12 ]

34 голосов
/ 31 августа 2010

Недостатком решения «если» является то, что закомментированный код все еще должен быть скомпилирован (и, следовательно, все еще должен проверяться синтаксис).

Недостатком вашего решения является то, что ваши комментарии будут появляться в любой документации, сгенерированной из этого модуля.

Я использую версию решения pod, у которой нет этой проблемы. Pod поддерживает = формат начала ... = абзацы конечного формата, которые обрабатываются определенными форматерами. Я просто изобрел формат «комментариев», который не обрабатывается ни одним из используемых мной форматеров.

=begin comment

This is ignored by everything

=end comment

Обновление:

Я пропустил важную часть моего примера. Вы должны закончить раздел pod с помощью = 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";
15 голосов
/ 31 августа 2010

Документация 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 для получения дополнительной информации.*

10 голосов
/ 31 августа 2010

Хотя это нестандартно, я просто использую

=ignore 

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

=cut

Это работает так же хорошо, и напоминает мне, что это не POD.

  • В сторону: Интересно, что POD дает нам гибкую структуру для включения различных регионов, которые не должны рассматриваться как код, с указанием того, что означает этот регион. Ясно, что мы «комментируем вещи», потому что комментарии работают таким образом. Тем не менее, из термина ясно, что комментарии должны быть словами, а не инструкциями; документация не переделки.
7 голосов
/ 31 августа 2010

Редактор с функцией «Регион комментариев».

Например, Komodo Edit.Я почти уверен, что Eclipse и JEdit делают это также, но у меня нет их, чтобы проверять.

Функция обычно вставляет символ «Комментировать эту строку» в начале каждой строки в выбраннойобласть, край.Преимущество состоит в том, что он не конфликтует с существующими комментариями (что представляет собой риск, если вы перенесете область, содержащую многострочный комментарий на большинстве языков)

5 голосов
/ 15 июня 2012

Это тоже работает:

q^
   This is another way to 
   add multi-line comments
   to your code
^ if 0;
4 голосов
/ 31 августа 2010

Мое любимое устройство многострочных комментариев - __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.
3 голосов
/ 01 сентября 2010

В дополнение к

=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, но Hello "Yay!" будет.

1 голос
/ 28 марта 2013

Нечто подобное работает тоже:

q{
my comment
};

Это выражение, которое, я думаю, оценивается при запуске Perl.

1 голос
/ 31 августа 2010

Один особый вариант использования - закомментирование нескольких строк кода. Но если вы используете систему контроля версий, вы можете просто удалить нежелательный код, а не комментировать его, и если вам когда-нибудь понадобится его вернуть, просто загрузите старую версию.

0 голосов
/ 28 января 2014

Это не синтаксический способ Perl, но в большинстве редакторов (таких как Notepad ++) вы можете выделить код, который вы хотите закомментировать, и затем нажать CTRL + K.Чтобы удалить комментарии, вы можете выделить их и нажать CTRL + Shift + K.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...