This and other RFCs are available on the web at
http://dev.perl.org/rfc/
=head1 TITLE
Inline Comments for Perl.
=head1 VERSION
Maintainer: Glenn Linderman <[EMAIL PROTECTED]>
Date: 14 Aug 2000
Last Modified: 14 Sep 2000
Mailing List: [EMAIL PROTECTED]
Number: 102
Version: 2
Status: Frozen
=head1 ABSTRACT
Unlike many programming languages Perl does not currently implement
inline comments. This can be confusing/tedious to programmers. This
could be solved by adding a syntax to Perl 6 that would allow for
inline comments.
=head1 DESCRIPTION
Comments are important to programmers as a way of documenting their
code and for debugging purposes. Perl's comment syntax requires that
comments can only be placed at the end of a line, or on a separate line
(or lines). Sometimes it is desirable to place a comment (or comments)
within a line.
Perl currently uses the "#" character as an end-of-line comment
introducer (as do many other scripting languages). RFC 5 (multiline
comments) suggests as a possible promising syntax an introducer of the
form "#<<TOKEN", combining the perl concepts of "comment" and "here
document" for multiline comments.
It is felt that an inline comment syntax should leverage the existing
Perl comment concept ("#" introducer) and that the introducer and
terminator should look like a matched pair for ease of understanding.
=head2 Ideas from other languages
C/C++ use "/*" and "*/" as introducer/terminator for in-line and
multi-line comments. A different syntax was introduced in C++ for
end-of-line comments: "//".
Pascal uses "(*" and "*) as introducer/terminator for in-line and
multi-line comments. It has similar difficulties as C/C++ with
commenting out blocks of code.
Forth uses "(" and ")" as introducer/terminator for in-line and
multi-line comments, and "\" for end-of-line comments.
Basic doesn't support in-line or multi-line comments.
All the languages that use the same syntax for in-line and multi-line
comments suffer from confusion when a multi-line comment is used to
comment out a block of code containing in-line comments.
Implementations have historically varied within the language on how to
handle that situation.
=head2 Ideas for perl
An idea that produces a paired feeling would be to use one of the
paired character pairs, as in "#<" and ">#". I like this one best, of
the three paired character possibilities ("<>", "()", "{}") because it
is more closely related to the "#<<TOKEN" syntax suggested for
multi-line comments by RFC 5, thus also achieving a more Perlish feel,
when combined with that syntax.
An idea with obvious appeal to C/C++/Pascal programmers would be to use
"#*" as the introducer, and "*# as the terminator. This would probably
work as good as any.
=head2 Compatibility considerations
Because "#" has been used to mean comment, it seems that something
related to "#" should continue to be used to mean comment.
Use of a bare "#" as an in-line comment terminator would break lots of
existing practice, where people have used a variant number of "#"
characters to introduce comments of more or less importance, or as a
way of achieving "pretty" multi-line comments (example of such next)
#################################
## This is a stand-out comment ##
#################################
Hence it seems some other character should be combined with "#" as an
in-line comment introducer, and used in reverse order (per practice in
other languages) as the comment terminator.
Because historically there is nothing to prevent a sequence such as the
following:
code #< this is an end-of-line ># comment
from appearing, this suggestion is not 100% compatible with perl5
syntax. However, such a sequence is relatively unlikely: I've never
seen one in any Perl code I've perused. By limiting this construct to
less than a single line, it limits the boundaries of confusion: if "#<"
is found with the intended meaning of an end-of-line comment introducer
followed by a "<" character, the highly probable lack of the sequence
">#" within the same line can be diagnosed with a warning or error
identifying exactly the line involved.
=head2 Discussion in perl6-language and perl6-language-mlc
There was some discussion of in-line comments in the perl6-language and
perl6-language-mlc lists. There wasn't a consensus reached. The
competing suggestion for in-line comments was to define "qc/comment/"
as a syntax that evaporates. I don't like that syntax, because it
looks more like code than comment, and doesn't stand out to the eye as
a comment when mixed within code:
$foo = qw/foo bar/ qc/eat me/;
It is not clear whether such syntax would be easily readable within all
forms of expressions, without operators, as shown in the above example,
vs
$foo = qw/foo bar/ #<eat me>#;
=head1 IMPLEMENTATION
Should be straightforward in the Perl parser/lexer.
=head1 REFERENCES
RFC 5: Multiline Comments for Perl.
Discussion archives of the perl-language and perl-language-mlc lists