Homepage: https://www.gnu.org/software/emacs
Author: William F. Mann
Perl code editing commands for GNU Emacs
To enter `perl-mode' automatically, change the first line of your
perl script to:
#!/usr/bin/perl -- # -*-Perl-*-
With arguments to perl:
#!/usr/bin/perl -P- # -*-Perl-*-
To handle files included with do 'filename.pl';, add something like
(setq auto-mode-alist (append (list (cons "\\.pl\\'" 'perl-mode))
auto-mode-alist))
to your init file; otherwise the .pl suffix defaults to prolog-mode.
This code is based on the 18.53 version c-mode.el, with extensive
rewriting. Most of the features of c-mode survived intact.
I added a new feature which adds functionality to TAB; it is controlled
by the variable perl-tab-to-comment. With it enabled, TAB does the
first thing it can from the following list: change the indentation;
move past leading white space; delete an empty comment; reindent a
comment; move to end of line; create an empty comment; tell you that
the line ends in a quoted string, or has a # which should be a \#.
I also tuned a few things: comments and labels starting in column
zero are left there by perl-indent-exp; perl-beginning-of-function
goes back to the first open brace/paren in column zero, the open brace
in 'sub ... {', or the equal sign in 'format ... ='; perl-indent-exp
(meta-^q) indents from the current line through the close of the next
brace/paren, so you don't need to start exactly at a brace or paren.
It may be good style to put a set of redundant braces around your
main program. This will let you reindent it with meta-^q.
Known problems (these are all caused by limitations in the Emacs Lisp
parsing routine (parse-partial-sexp), which was not designed for such
a rich language; writing a more suitable parser would be a big job):
2) The globbing syntax is not recognized, so special
characters in the pattern string must be backslashed.
Here are some ugly tricks to bypass some of these problems: the perl
expression /`/ (that's a back-tick) usually evaluates harmlessly,
but will trick perl-mode into starting a quoted string, which
can be ended with another /`/. Assuming you have no embedded
back-ticks, this can used to help solve problem 3:
/`/; $ugly = q?"'$?; /`/;
The same trick can be used for problem 6 as in:
/{/; while (<${glob_me}>)
but a simpler solution is to add a space between the $ and the {:
while (<$ {glob_me}>)
Problem 7 is even worse, but this 'fix' does work :-(
$DB'stop#'
[$DB'line#'
] =~ s/;9$//;