home *** CD-ROM | disk | FTP | other *** search
-
-
-
- PPPPEEEERRRRLLLLSSSSTTTTYYYYLLLLEEEE((((1111))))UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV ((((RRRReeeelllleeeeaaaasssseeee 0000....0000 PPPPaaaattttcccchhhhlllleeeevvvveeeellll 00000000))))PPPPEEEERRRRLLLLSSSSTTTTYYYYLLLLEEEE((((1111))))
-
-
-
- NNNNAAAAMMMMEEEE
- perlstyle - Perl style guide
-
- DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
- SSSSttttyyyylllleeee
-
- Each programmer will, of course, have his or her own
- preferences in regards to formatting, but there are some
- general guidelines that will make your programs easier to
- read, understand, and maintain.
-
- Regarding aesthetics of code lay out, about the only thing
- Larry cares strongly about is that the closing curly brace
- of a multi-line BLOCK should line up with the keyword that
- started the construct. Beyond that, he has other
- preferences that aren't so strong:
-
- o+ 4-column indent.
-
- o+ Opening curly on same line as keyword, if possible,
- otherwise line up.
-
- o+ Space before the opening curly of a multiline BLOCK.
-
- o+ One-line BLOCK may be put on one line, including
- curlies.
-
- o+ No space before the semicolon.
-
- o+ Semicolon omitted in "short" one-line BLOCK.
-
- o+ Space around most operators.
-
- o+ Space around a "complex" subscript (inside brackets).
-
- o+ Blank lines between chunks that do different things.
-
- o+ Uncuddled elses.
-
- o+ No space between function name and its opening paren.
-
- o+ Space after each comma.
-
- o+ Long lines broken after an operator (except "and" and
- "or").
-
- o+ Space after last paren matching on current line.
-
- o+ Line up corresponding items vertically.
-
- o+ Omit redundant punctuation as long as clarity doesn't
- suffer.
-
-
-
- Page 1 (printed 6/30/95)
-
-
-
-
-
-
- PPPPEEEERRRRLLLLSSSSTTTTYYYYLLLLEEEE((((1111))))UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV ((((RRRReeeelllleeeeaaaasssseeee 0000....0000 PPPPaaaattttcccchhhhlllleeeevvvveeeellll 00000000))))PPPPEEEERRRRLLLLSSSSTTTTYYYYLLLLEEEE((((1111))))
-
-
-
- Larry has his reasons for each of these things, but he
- doen't claim that everyone else's mind works the same as his
- does.
-
- Here are some other more substantive style issues to think
- about:
-
- o+ Just because you _C_A_N do something a particular way
- doesn't mean that you _S_H_O_U_L_D do it that way. Perl is
- designed to give you several ways to do anything, so
- consider picking the most readable one. For instance
-
- open(FOO,$foo) || die "Can't open $foo: $!";
-
- is better than
-
- die "Can't open $foo: $!" unless open(FOO,$foo);
-
- because the second way hides the main point of the
- statement in a modifier. On the other hand
-
- print "Starting analysis\n" if $verbose;
-
- is better than
-
- $verbose && print "Starting analysis\n";
-
- since the main point isn't whether the user typed ----vvvv or
- not.
-
- Similarly, just because an operator lets you assume
- default arguments doesn't mean that you have to make use
- of the defaults. The defaults are there for lazy
- systems programmers writing one-shot programs. If you
- want your program to be readable, consider supplying the
- argument.
-
- Along the same lines, just because you _C_A_N omit
- parentheses in many places doesn't mean that you ought
- to:
-
- return print reverse sort num values %array;
- return print(reverse(sort num (values(%array))));
-
- When in doubt, parenthesize. At the very least it will
- let some poor schmuck bounce on the % key in vvvviiii.
-
- Even if you aren't in doubt, consider the mental welfare
- of the person who has to maintain the code after you,
- and who will probably put parens in the wrong place.
-
-
-
-
-
- Page 2 (printed 6/30/95)
-
-
-
-
-
-
- PPPPEEEERRRRLLLLSSSSTTTTYYYYLLLLEEEE((((1111))))UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV ((((RRRReeeelllleeeeaaaasssseeee 0000....0000 PPPPaaaattttcccchhhhlllleeeevvvveeeellll 00000000))))PPPPEEEERRRRLLLLSSSSTTTTYYYYLLLLEEEE((((1111))))
-
-
-
- o+ Don't go through silly contortions to exit a loop at the
- top or the bottom, when Perl provides the last operator
- so you can exit in the middle. Just "outdent" it a
- little to make it more visible:
-
- LINE:
- for (;;) {
- statements;
- last LINE if $foo;
- next LINE if /^#/;
- statements;
- }
-
-
- o+ Don't be afraid to use loop labels--they're there to
- enhance readability as well as to allow multi-level loop
- breaks. See the previous example.
-
- o+ For portability, when using features that may not be
- implemented on every machine, test the construct in an
- eval to see if it fails. If you know what version or
- patchlevel a particular feature was implemented, you can
- test $] ($PERL_VERSION in English) to see if it will be
- there. The Config module will also let you interrogate
- values determined by the CCCCoooonnnnffffiiiigggguuuurrrreeee program when Perl was
- installed.
-
- o+ Choose mnemonic identifiers. If you can't remember what
- mnemonic means, you've got a problem.
-
- o+ If you have a really hairy regular expression, use the
- /x modifier and put in some whitespace to make it look a
- little less like line noise. Don't use slash as a
- delimiter when your regexp has slashes or backslashes.
-
- o+ Use the new "and" and "or" operators to avoid having to
- parenthesize list operators so much, and to reduce the
- incidence of punctuational operators like && and ||.
- Call your subroutines as if they were functions or list
- operators to avoid excessive ampersands and parens.
-
- o+ Use here documents instead of repeated _p_r_i_n_t()
- statements.
-
- o+ Line up corresponding things vertically, especially if
- it'd be too long to fit on one line anyway.
-
- $IDX = $ST_MTIME;
- $IDX = $ST_ATIME if $opt_u;
- $IDX = $ST_CTIME if $opt_c;
- $IDX = $ST_SIZE if $opt_s;
-
-
-
-
- Page 3 (printed 6/30/95)
-
-
-
-
-
-
- PPPPEEEERRRRLLLLSSSSTTTTYYYYLLLLEEEE((((1111))))UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV ((((RRRReeeelllleeeeaaaasssseeee 0000....0000 PPPPaaaattttcccchhhhlllleeeevvvveeeellll 00000000))))PPPPEEEERRRRLLLLSSSSTTTTYYYYLLLLEEEE((((1111))))
-
-
-
- mkdir $tmpdir, 0700 or die "can't mkdir $tmpdir: $!";
- chdir($tmpdir) or die "can't chdir $tmpdir: $!";
- mkdir 'tmp', 0777 or die "can't mkdir $tmpdir/tmp: $!";
-
-
- o+ Line up your translations when it makes sense:
-
- tr [abc]
- [xyz];
-
-
- o+ Think about reusability. Why waste brainpower on a
- one-shot when you might want to do something like it
- again? Consider generalizing your code. Consider
- writing a module or object class. Consider making your
- code run cleanly with use strict and ----wwww in effect.
- Consider giving away your code. Consider changing your
- whole world view. Consider... oh, never mind.
-
- o+ Be consistent.
-
- o+ Be nice.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Page 4 (printed 6/30/95)
-
-
-
-