Каковы общие обходные пути для многострочных комментариев в Perl?

Этот RFC упоминает

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

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

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

if (0) {
  <comment>
}

и

=pod
<comment>
=cut

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

Ответ 1

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

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

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

=begin comment

This is ignored by everything

=end comment

Update:

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

Ответ 2

Документация 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.

Ответ 3

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

=ignore 

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

=cut

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

  • Кроме того: Интересно, что POD дает нам гибкую структуру для включения различных регионов, которые не должны рассматриваться как код, указывая, что означает этот регион. Ясно, что мы "комментируем ситуацию", потому что комментарии работают таким образом. Тем не менее, из термина ясно, что комментарии предназначены для слов, а не инструкций; документация без изменений.

Ответ 4

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

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

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

Ответ 5

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

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

Ответ 6

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

Ответ 7

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

=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!" будет.

Ответ 8

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

Ответ 9

Что-то вроде работы тоже:

q{
my comment
};

Это выражение, которое, как мне кажется, оценивается во время работы Perl.

Ответ 10

Я использую этот способ и работаю для меня

=head

"your code to comment
monkey
banana"

=cut

Ответ 11

Еще один полезный способ!


=begin GHOSTCODE

whatever you want to uncomment

=end GHOSTCODE

=cut

Ответ 12

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