Как я могу закомментировать только часть строки в Perl?

Как мне прокомментировать часть одной строки в Perl, например следующую строку:

 if($clevel==0){#never happends}

Я хотел бы иметь возможность прокомментировать эту последнюю закрывающую скобку, не переходя на новую строку.


person john-jones    schedule 12.05.2010    source источник
comment
Пожалуйста, будьте конкретны: скопируйте и вставьте в свой вопрос строку кода, с которой вы работаете, и сообщите нам, какую часть вы хотели бы выборочно прокомментировать.   -  person Greg Bacon    schedule 12.05.2010
comment
Что не так с тем, что у вас есть? Вы закрываете блок другим кодом? Если вы не собираетесь запускать блок, почему бы вам тоже не закомментировать if?   -  person brian d foy    schedule 16.05.2010
comment
Конечно, я спрашиваю об этом в основном, чтобы знать, как это сделать в целом. Этот единственный случай сам по себе не имеет большого значения. Но причина в повышенной читабельности. Если я закомментирую строку, она изменит цвет, а также сместится с другими строками if($clevel==x).   -  person john-jones    schedule 16.05.2010


Ответы (6)


Знак # начинает комментарий, который заканчивается концом строки.

person lexu    schedule 12.05.2010
comment
да, я знаю, но я хочу закончить комментарий до того, как закончится строка. - person john-jones; 12.05.2010
comment
@Herrmann Ingjaldsson: для этого нет .. но посмотрите здесь идеи Perl6: dev .perl.org/perl6/rfc/102.html - person lexu; 12.05.2010
comment
ну тогда ответ на вопрос. - person john-jones; 12.05.2010

Если это действительно так важно, используйте фильтрацию источников.

# C_Style_Comments.pm
package C_Style_Comments;
use Filter::Simple;
FILTER {   s{/\* .* \*/}{}gmx    };
1;

$ perl -MC_Style_Comments -e 'print /* 5, No wait, I mean */ 3'
3
person mob    schedule 12.05.2010
comment
+1 за исходные фильтры. То, что у вас есть, похоже, что вы даже можете закомментировать части комментария или строки. Прохладный - person Axeman; 12.05.2010
comment
Исходные фильтры - зло. Внезапно вы не можете доверять коду перед вашими глазами, потому что какая-то невидимая магия в другом месте программы может изменить его. Это может быть полезно в разработке, но держитесь подальше от него в рабочем коде. ИМХО. - person Ether; 12.05.2010
comment
Как и многие злые вещи, есть время и место для исходных фильтров (этот вопрос не обязательно один из таких). Всегда надевайте защитные очки. - person mob; 12.05.2010
comment
@Ether — я загрузил для вас Acme::SafetyGoggles в CPAN ;-) - person mob; 12.05.2010
comment
правило: хех, классный модуль! Но предполагается, что люди, использующие модули Acme, знают, во что они ввязываются... Я просто адресовал этот совет новичкам. :) - person Ether; 12.05.2010

По какой причине вы не можете написать:

if($clevel==0){#never happends}

as :

if($clevel==0){} #never happens

Есть несколько трюков, которые вы можете использовать, чтобы скрыть сообщения, например:

0 and 'some comment'

Но вы только еще больше запутаете, если кто-то другой будет поддерживать ваш код в будущем.

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

person Joe    schedule 12.05.2010
comment
Для полного сопровождения кода вы не должны просто комментировать невозможное условие, вы должны предупредить или умереть или напечатать какое-нибудь забавное сообщение (потому что это распространяется), чтобы вы знали, когда код достиг одного из эти невозможные линии. - person Axeman; 13.05.2010
comment
@Axeman: я предпочитаю избегать «умереть» после отладки некоторого кода, когда кто-то не подумал, как все может измениться в будущем, таким образом попав в один из тех разделов «это никогда не должно происходить». Но вы правы — warn 'this should never happen' выполнит конкретное задание, которое было задано. - person Joe; 13.05.2010
comment
Ах, это то, что один из моих профессоров однажды рекомендовал как способ комментировать разделы кода, когда у них нет многострочного механизма комментариев. - person Abdul; 12.12.2016
comment
@Abdul: многострочные комментарии сложны, потому что может быть трудно сказать, когда комментарий заканчивается, если он очень, очень длинный. Или если вы попытаетесь закомментировать блок, который содержит другой комментарий. Но вы можете сделать это на Perl с синтаксисом '‹‹EOF' или POD. - person Joe; 12.12.2016
comment
А спустя годы, после увольнения с работы, я получаю электронное письмо с вопросом, почему мой код выдал сообщение this should never happen. Конечно же, кто-то изменил некоторую логику, чтобы она попала в блок «никогда не происходит». - person Joe; 24.04.2019

#, а затем разрыв строки. Вы можете обращаться с ними как со своего рода скобками, так как в Perl мало что теряет смысл из-за того, что они находятся на разных строках.

my $ans = 2 + rand( 5 ) + $pixels / FUDGE_FACTOR;

To

my $ans = # 2 + 
    rand( 5 ) + $pixels # / FUDGE_FACTOR
    ;

Или из:

if ( dont_know_how_this_breaks() && defined $attribute ) { 
   #...
}

To:

if ( # dont_know_how_this_breaks() && 
     defined $attribute ) { 
   #...
}
person Axeman    schedule 12.05.2010
comment
Да, это правда, но я хочу что-то написать, потом прокомментировать и снова написать. Все в пределах одной линии. - person john-jones; 12.05.2010
comment
@Hermann Почему разделение строки кода, как в этом ответе, не делает то, что вы хотите? - person Greg Bacon; 12.05.2010
comment
потому что это требует, чтобы я разделил линию. Я хочу, чтобы предложение продолжалось сразу после комментария. небольшое объяснение одного слова в предложении не должно требовать разрыва строки. код, который я пишу, следующий: if($clevel==0) {#never случится} здесь было бы неплохо, если бы я мог закончить эту одну закрывающую скобку, не переходя к следующей строке. это похоже на то, что не нужно делать новую строку каждый раз, когда кто-то помещает [] в цитату. требуя, чтобы оператор новой строки мог уменьшить читабельность и компактность. И, наконец, как мне заставить новую строку в комментарии здесь? - person john-jones; 12.05.2010
comment
@Hermann Ingjaldsson: Просто комментировать, что чего-то не происходит, не так полезно, как делать что-то вроде утверждения, что этого никогда не происходит. У меня были случаи, когда код сталкивался с никогда не встречающимися строками, и полезно сообщить, что он столкнулся с условием, которое вы никогда не считали возможным. - person Axeman; 13.05.2010

Используйте строку в качестве встроенного комментария:

perl -lne '$a++; q#some explanation#;print;'

Встроенные комментарии необходимы для комментирования Perl-кода, встроенного в Makefiles (а также Bash-скрипты и Vim-скрипты), как в этом вызове perl vimscript.. файл тезауруса VIM

person mosh    schedule 19.11.2017

Часть строки или многострочный комментарий в perl:

=comment
...
...
...

=cut
person Michael Horojanski    schedule 13.05.2015
comment
Я видел этот синтаксис для многострочного комментария, но не для частичного комментария. Я не уверен на 100%, но я думаю, что вы ошибаетесь в своем утверждении, что этот синтаксис можно использовать для частичного комментария. - person oyvey; 23.11.2016