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
  Version: 1
  Mailing List: [EMAIL PROTECTED]
  Number: 102

=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) see http://dev.perl.org/rfc

Discussion archives of the perl-language and perl-language-mlc lists


Reply via email to