home *** CD-ROM | disk | FTP | other *** search
/ Amiga Magazin: Amiga-CD 1996 July / AMIGA_1996_7.BIN / ausgabe_7_96 / pd-programmierung / perl5_002bin.lha / man / catp / perlstyle.0 < prev    next >
Text File  |  1996-03-02  |  15KB  |  331 lines

  1.  
  2.  
  3.  
  4. PERLSTYLE(1)   User Contributed Perl Documentation   PERLSTYLE(1)
  5.  
  6.  
  7. NNNNAAAAMMMMEEEE
  8.        perlstyle - Perl style guide
  9.  
  10. DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
  11.        Each programmer will, of course, have his or her own
  12.        preferences in regards to formatting, but there are some
  13.        general guidelines that will make your programs easier to
  14.        read, understand, and maintain.
  15.  
  16.        The most important thing is to run your programs under the
  17.        ----wwww flag at all times.  You may turn it off explicitly for
  18.        particular portions of code via the $$$$^^^^WWWW variable if you
  19.        must.  You should also always run under uuuusssseeee ssssttttrrrriiiicccctttt or know
  20.        the reason why not.  The <use sigtrap> and even <use
  21.        diagnostics> pragmas may also prove useful.
  22.  
  23.        Regarding aesthetics of code lay out, about the only thing
  24.        Larry cares strongly about is that the closing curly brace
  25.        of a multi-line BLOCK should line up with the keyword that
  26.        started the construct.  Beyond that, he has other
  27.        preferences that aren't so strong:
  28.  
  29.        +o   4-column indent.
  30.  
  31.        +o   Opening curly on same line as keyword, if possible,
  32.            otherwise line up.
  33.  
  34.        +o   Space before the opening curly of a multiline BLOCK.
  35.  
  36.        +o   One-line BLOCK may be put on one line, including
  37.            curlies.
  38.  
  39.        +o   No space before the semicolon.
  40.  
  41.        +o   Semicolon omitted in "short" one-line BLOCK.
  42.  
  43.        +o   Space around most operators.
  44.  
  45.        +o   Space around a "complex" subscript (inside brackets).
  46.  
  47.        +o   Blank lines between chunks that do different things.
  48.  
  49.        +o   Uncuddled elses.
  50.  
  51.        +o   No space between function name and its opening paren.
  52.  
  53.        +o   Space after each comma.
  54.  
  55.        +o   Long lines broken after an operator (except "and" and
  56.            "or").
  57.  
  58.        +o   Space after last paren matching on current line.
  59.  
  60.  
  61.  
  62.  
  63.  
  64. 30/Jan/96                perl 5.002 with                        1
  65.  
  66.  
  67.  
  68.  
  69.  
  70. PERLSTYLE(1)   User Contributed Perl Documentation   PERLSTYLE(1)
  71.  
  72.  
  73.        +o   Line up corresponding items vertically.
  74.  
  75.        +o   Omit redundant punctuation as long as clarity doesn't
  76.            suffer.
  77.  
  78.        Larry has his reasons for each of these things, but he
  79.        doen't claim that everyone else's mind works the same as
  80.        his does.
  81.  
  82.        Here are some other more substantive style issues to think
  83.        about:
  84.  
  85.        +o   Just because you _C_A_N do something a particular way
  86.            doesn't mean that you _S_H_O_U_L_D do it that way.  Perl is
  87.            designed to give you several ways to do anything, so
  88.            consider picking the most readable one.  For instance
  89.  
  90.                ooooppppeeeennnn((((FFFFOOOOOOOO,,,,$$$$ffffoooooooo)))) |||||||| ddddiiiieeee """"CCCCaaaannnn''''tttt ooooppppeeeennnn $$$$ffffoooooooo:::: $$$$!!!!"""";;;;
  91.  
  92.            is better than
  93.  
  94.                ddddiiiieeee """"CCCCaaaannnn''''tttt ooooppppeeeennnn $$$$ffffoooooooo:::: $$$$!!!!"""" uuuunnnnlllleeeessssssss ooooppppeeeennnn((((FFFFOOOOOOOO,,,,$$$$ffffoooooooo))));;;;
  95.  
  96.            because the second way hides the main point of the
  97.            statement in a modifier.  On the other hand
  98.  
  99.                pppprrrriiiinnnntttt """"SSSSttttaaaarrrrttttiiiinnnngggg aaaannnnaaaallllyyyyssssiiiissss\\\\nnnn"""" iiiiffff $$$$vvvveeeerrrrbbbboooosssseeee;;;;
  100.  
  101.            is better than
  102.  
  103.                $$$$vvvveeeerrrrbbbboooosssseeee &&&&&&&& pppprrrriiiinnnntttt """"SSSSttttaaaarrrrttttiiiinnnngggg aaaannnnaaaallllyyyyssssiiiissss\\\\nnnn"""";;;;
  104.  
  105.            since the main point isn't whether the user typed ----vvvv
  106.            or not.
  107.  
  108.            Similarly, just because an operator lets you assume
  109.            default arguments doesn't mean that you have to make
  110.            use of the defaults.  The defaults are there for lazy
  111.            systems programmers writing one-shot programs.  If you
  112.            want your program to be readable, consider supplying
  113.            the argument.
  114.  
  115.            Along the same lines, just because you _C_A_N omit
  116.            parentheses in many places doesn't mean that you ought
  117.            to:
  118.  
  119.                rrrreeeettttuuuurrrrnnnn pppprrrriiiinnnntttt rrrreeeevvvveeeerrrrsssseeee ssssoooorrrrtttt nnnnuuuummmm vvvvaaaalllluuuueeeessss %%%%aaaarrrrrrrraaaayyyy;;;;
  120.                rrrreeeettttuuuurrrrnnnn pppprrrriiiinnnntttt((((rrrreeeevvvveeeerrrrsssseeee((((ssssoooorrrrtttt nnnnuuuummmm ((((vvvvaaaalllluuuueeeessss((((%%%%aaaarrrrrrrraaaayyyy))))))))))))))));;;;
  121.  
  122.            When in doubt, parenthesize.  At the very least it
  123.            will let some poor schmuck bounce on the % key in vvvviiii.
  124.  
  125.            Even if you aren't in doubt, consider the mental
  126.            welfare of the person who has to maintain the code
  127.  
  128.  
  129.  
  130. 30/Jan/96                perl 5.002 with                        2
  131.  
  132.  
  133.  
  134.  
  135.  
  136. PERLSTYLE(1)   User Contributed Perl Documentation   PERLSTYLE(1)
  137.  
  138.  
  139.            after you, and who will probably put parens in the
  140.            wrong place.
  141.  
  142.        +o   Don't go through silly contortions to exit a loop at
  143.            the top or the bottom, when Perl provides the llllaaaasssstttt
  144.            operator so you can exit in the middle.  Just
  145.            "outdent" it a little to make it more visible:
  146.  
  147.                LLLLIIIINNNNEEEE::::
  148.                    ffffoooorrrr ((((;;;;;;;;)))) {{{{
  149.                        ssssttttaaaatttteeeemmmmeeeennnnttttssss;;;;
  150.                      llllaaaasssstttt LLLLIIIINNNNEEEE iiiiffff $$$$ffffoooooooo;;;;
  151.                        nnnneeeexxxxtttt LLLLIIIINNNNEEEE iiiiffff ////^^^^####////;;;;
  152.                        ssssttttaaaatttteeeemmmmeeeennnnttttssss;;;;
  153.                    }}}}
  154.  
  155.  
  156.        +o   Don't be afraid to use loop labels--they're there to
  157.            enhance readability as well as to allow multi-level
  158.            loop breaks.  See the previous example.
  159.  
  160.        +o   Avoid using _g_r_e_p_(_) (or _m_a_p_(_)) or `backticks` in a void
  161.            context, that is, when you just throw away their
  162.            return values.  Those functions all have return
  163.            values, so use them.  Otherwise use a _f_o_r_e_a_c_h_(_) loop
  164.            or the _s_y_s_t_e_m_(_) function instead.
  165.  
  166.        +o   For portability, when using features that may not be
  167.            implemented on every machine, test the construct in an
  168.            eval to see if it fails.  If you know what version or
  169.            patchlevel a particular feature was implemented, you
  170.            can test $$$$]]]] ($PERL_VERSION in EEEEnnnngggglllliiiisssshhhh) to see if it
  171.            will be there.  The CCCCoooonnnnffffiiiigggg module will also let you
  172.            interrogate values determined by the CCCCoooonnnnffffiiiigggguuuurrrreeee program
  173.            when Perl was installed.
  174.  
  175.        +o   Choose mnemonic identifiers.  If you can't remember
  176.            what mnemonic means, you've got a problem.
  177.  
  178.        +o   While short identifiers like $$$$ggggoooottttiiiitttt are probably ok,
  179.            use underscores to separate words.  It is generally
  180.            easier to read $$$$vvvvaaaarrrr____nnnnaaaammmmeeeessss____lllliiiikkkkeeee____tttthhhhiiiissss than
  181.            $$$$VVVVaaaarrrrNNNNaaaammmmeeeessssLLLLiiiikkkkeeeeTTTThhhhiiiissss, especially for non-native speakers
  182.            of English. It's also a simple rule that works
  183.            consistently with VAR_NAMES_LIKE_THIS.
  184.  
  185.            Package names are sometimes an exception to this rule.
  186.            Perl informally reserves lowercase module names for
  187.            "pragma" modules like iiiinnnntttteeeeggggeeeerrrr and ssssttttrrrriiiicccctttt.  Other
  188.            modules should begin with a capital letter and use
  189.            mixed case, but probably without underscores due to
  190.            limitations in primitive filesystems' representations
  191.            of module names as files that must fit into a few
  192.            sparse bites.
  193.  
  194.  
  195.  
  196. 30/Jan/96                perl 5.002 with                        3
  197.  
  198.  
  199.  
  200.  
  201.  
  202. PERLSTYLE(1)   User Contributed Perl Documentation   PERLSTYLE(1)
  203.  
  204.  
  205.        +o   You may find it helpful to use letter case to indicate
  206.            the scope or nature of a variable. For example:
  207.  
  208.                $$$$AAAALLLLLLLL____CCCCAAAAPPPPSSSS____HHHHEEEERRRREEEE   ccccoooonnnnssssttttaaaannnnttttssss oooonnnnllllyyyy ((((bbbbeeeewwwwaaaarrrreeee ccccllllaaaasssshhhheeeessss wwwwiiiitttthhhh ppppeeeerrrrllll vvvvaaaarrrrssss!!!!))))
  209.                $$$$SSSSoooommmmeeee____CCCCaaaappppssss____HHHHeeeerrrreeee  ppppaaaacccckkkkaaaaggggeeee----wwwwiiiiddddeeee gggglllloooobbbbaaaallll////ssssttttaaaattttiiiicccc
  210.                $$$$nnnnoooo____ccccaaaappppssss____hhhheeeerrrreeee    ffffuuuunnnnccccttttiiiioooonnnn ssssccccooooppppeeee mmmmyyyy(((()))) oooorrrr llllooooccccaaaallll(((()))) vvvvaaaarrrriiiiaaaabbbblllleeeessss
  211.  
  212.            Function and method names seem to work best as all
  213.            lowercase.  E.g., $$$$oooobbbbjjjj->_a_s___s_t_r_i_n_g_(_).
  214.  
  215.            You can use a leading underscore to indicate that a
  216.            variable or function should not be used outside the
  217.            package that defined it.
  218.  
  219.        +o   If you have a really hairy regular expression, use the
  220.            ////xxxx modifier and put in some whitespace to make it look
  221.            a little less like line noise.  Don't use slash as a
  222.            delimiter when your regexp has slashes or backslashes.
  223.  
  224.        +o   Use the new "and" and "or" operators to avoid having
  225.            to parenthesize list operators so much, and to reduce
  226.            the incidence of punctuational operators like &&&&&&&& and
  227.            ||||||||.  Call your subroutines as if they were functions
  228.            or list operators to avoid excessive ampersands and
  229.            parens.
  230.  
  231.        +o   Use here documents instead of repeated _p_r_i_n_t_(_)
  232.            statements.
  233.  
  234.        +o   Line up corresponding things vertically, especially if
  235.            it'd be too long to fit on one line anyway.
  236.  
  237.                $$$$IIIIDDDDXXXX ==== $$$$SSSSTTTT____MMMMTTTTIIIIMMMMEEEE;;;;
  238.                $$$$IIIIDDDDXXXX ==== $$$$SSSSTTTT____AAAATTTTIIIIMMMMEEEE       iiiiffff $$$$oooopppptttt____uuuu;;;;
  239.                $$$$IIIIDDDDXXXX ==== $$$$SSSSTTTT____CCCCTTTTIIIIMMMMEEEE       iiiiffff $$$$oooopppptttt____cccc;;;;
  240.                $$$$IIIIDDDDXXXX ==== $$$$SSSSTTTT____SSSSIIIIZZZZEEEE        iiiiffff $$$$oooopppptttt____ssss;;;;
  241.  
  242.                mmmmkkkkddddiiiirrrr $$$$ttttmmmmppppddddiiiirrrr,,,, 0000777700000000 oooorrrr ddddiiiieeee """"ccccaaaannnn''''tttt mmmmkkkkddddiiiirrrr $$$$ttttmmmmppppddddiiiirrrr:::: $$$$!!!!"""";;;;
  243.                cccchhhhddddiiiirrrr(((($$$$ttttmmmmppppddddiiiirrrr))))      oooorrrr ddddiiiieeee """"ccccaaaannnn''''tttt cccchhhhddddiiiirrrr $$$$ttttmmmmppppddddiiiirrrr:::: $$$$!!!!"""";;;;
  244.                mmmmkkkkddddiiiirrrr ''''ttttmmmmpppp'''',,,,   0000777777777777 oooorrrr ddddiiiieeee """"ccccaaaannnn''''tttt mmmmkkkkddddiiiirrrr $$$$ttttmmmmppppddddiiiirrrr////ttttmmmmpppp:::: $$$$!!!!"""";;;;
  245.  
  246.  
  247.        +o   Always check the return codes of system calls.  Good
  248.            error messages should go to STDERR, include which
  249.            program caused the problem, what the failed system
  250.            call and arguments were, and VERY IMPORTANT) should
  251.            contain the standard system error message for what
  252.            went wrong.  Here's a simple but sufficient example:
  253.  
  254.                ooooppppeeeennnnddddiiiirrrr((((DDDD,,,, $$$$ddddiiiirrrr))))     oooorrrr ddddiiiieeee """"ccccaaaannnn''''tttt ooooppppeeeennnnddddiiiirrrr $$$$ddddiiiirrrr:::: $$$$!!!!"""";;;;
  255.  
  256.  
  257.        +o   Line up your translations when it makes sense:
  258.  
  259.  
  260.  
  261.  
  262. 30/Jan/96                perl 5.002 with                        4
  263.  
  264.  
  265.  
  266.  
  267.  
  268. PERLSTYLE(1)   User Contributed Perl Documentation   PERLSTYLE(1)
  269.  
  270.  
  271.                ttttrrrr [[[[aaaabbbbcccc]]]]
  272.                   [[[[xxxxyyyyzzzz]]]];;;;
  273.  
  274.  
  275.        +o   Think about reusability.  Why waste brainpower on a
  276.            one-shot when you might want to do something like it
  277.            again?  Consider generalizing your code.  Consider
  278.            writing a module or object class.  Consider making
  279.            your code run cleanly with uuuusssseeee ssssttttrrrriiiicccctttt and ----wwww in
  280.            effect.  Consider giving away your code.  Consider
  281.            changing your whole world view.  Consider... oh, never
  282.            mind.
  283.  
  284.        +o   Be consistent.
  285.  
  286.        +o   Be nice.
  287.  
  288.  
  289.  
  290.  
  291.  
  292.  
  293.  
  294.  
  295.  
  296.  
  297.  
  298.  
  299.  
  300.  
  301.  
  302.  
  303.  
  304.  
  305.  
  306.  
  307.  
  308.  
  309.  
  310.  
  311.  
  312.  
  313.  
  314.  
  315.  
  316.  
  317.  
  318.  
  319.  
  320.  
  321.  
  322.  
  323.  
  324.  
  325.  
  326.  
  327.  
  328. 30/Jan/96                perl 5.002 with                        5
  329.  
  330.  
  331.