X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/0135f10892ed8a21c4dbd1fca21fbcc365df99dd..7d6d3fb7dc08e427517e383b8ab9c9c47cbaab14:/pod/perlstyle.pod diff --git a/pod/perlstyle.pod b/pod/perlstyle.pod index 734b9ad..37dfaaf 100644 --- a/pod/perlstyle.pod +++ b/pod/perlstyle.pod @@ -6,17 +6,17 @@ perlstyle - Perl style guide 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. +make your programs easier to read, understand, and maintain. The most important thing is to run your programs under the B<-w> flag at all times. You may turn it off explicitly for particular -portions of code via the C<$^W> variable if you must. You should -also always run under C or know the reason why not. -The C and even C pragmas may also prove -useful. +portions of code via the C pragma or the C<$^W> variable +if you must. You should also always run under C or know the +reason why not. The C and even C pragmas +may also prove useful. Regarding aesthetics of code lay out, about the only thing Larry -cares strongly about is that the closing curly brace of +cares strongly about is that the closing curly bracket 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: @@ -72,7 +72,7 @@ Space after each comma. =item * -Long lines broken after an operator (except "and" and "or"). +Long lines broken after an operator (except C and C). =item * @@ -154,15 +154,15 @@ the middle. Just "outdent" it a little to make it more visible: =item * 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 +readability as well as to allow multilevel loop breaks. See the previous example. =item * -Avoid using grep() (or map()) or `backticks` in a void context, that is, -when you just throw away their return values. Those functions all -have return values, so use them. Otherwise use a foreach() loop or -the system() function instead. +Avoid using C (or C) or `backticks` in a void context, that is, +when you just throw away their return values. Those functions all +have return values, so use them. Otherwise use a C loop or +the C function instead. =item * @@ -178,31 +178,32 @@ determined by the B program when Perl was installed. Choose mnemonic identifiers. If you can't remember what mnemonic means, you've got a problem. -=item * +=item * -While short identifiers like $gotit are probably ok, use underscores to -separate words. It is generally easier to read $var_names_like_this than -$VarNamesLikeThis, especially for non-native speakers of English. It's -also a simple rule that works consistently with VAR_NAMES_LIKE_THIS. +While short identifiers like C<$gotit> are probably ok, use underscores to +separate words in longer identifiers. It is generally easier to read +C<$var_names_like_this> than C<$VarNamesLikeThis>, especially for +non-native speakers of English. It's also a simple rule that works +consistently with C. Package names are sometimes an exception to this rule. Perl informally reserves lowercase module names for "pragma" modules like C and C. Other modules should begin with a capital letter and use mixed case, but probably without underscores due to limitations in primitive file systems' representations of module names as files that must fit into a -few sparse bites. +few sparse bytes. =item * -You may find it helpful to use letter case to indicate the scope -or nature of a variable. For example: +You may find it helpful to use letter case to indicate the scope +or nature of a variable. For example: - $ALL_CAPS_HERE constants only (beware clashes with perl vars!) - $Some_Caps_Here package-wide global/static - $no_caps_here function scope my() or local() variables + $ALL_CAPS_HERE constants only (beware clashes with perl vars!) + $Some_Caps_Here package-wide global/static + $no_caps_here function scope my() or local() variables -Function and method names seem to work best as all lowercase. -E.g., $obj-Eas_string(). +Function and method names seem to work best as all lowercase. +E.g., C<$obj-Eas_string()>. You can use a leading underscore to indicate that a variable or function should not be used outside the package that defined it. @@ -215,24 +216,24 @@ Don't use slash as a delimiter when your regexp has slashes or backslashes. =item * -Use the new "and" and "or" operators to avoid having to parenthesize +Use the new C and C operators to avoid having to parenthesize list operators so much, and to reduce the incidence of punctuation operators like C<&&> and C<||>. Call your subroutines as if they were functions or list operators to avoid excessive ampersands and parentheses. =item * -Use here documents instead of repeated print() statements. +Use here documents instead of repeated C statements. =item * Line up corresponding things vertically, especially if it'd be too long -to fit on one line anyway. +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; + $IDX = $ST_MTIME; + $IDX = $ST_ATIME if $opt_u; + $IDX = $ST_CTIME if $opt_c; + $IDX = $ST_SIZE if $opt_s; mkdir $tmpdir, 0700 or die "can't mkdir $tmpdir: $!"; chdir($tmpdir) or die "can't chdir $tmpdir: $!"; @@ -241,8 +242,8 @@ to fit on one line anyway. =item * Always check the return codes of system calls. Good error messages should -go to STDERR, include which program caused the problem, what the failed -system call and arguments were, and VERY IMPORTANT) should contain the +go to C, include which program caused the problem, what the failed +system call and arguments were, and (VERY IMPORTANT) should contain the standard system error message for what went wrong. Here's a simple but sufficient example: @@ -250,7 +251,7 @@ sufficient example: =item * -Line up your translations when it makes sense: +Line up your transliterations when it makes sense: tr [abc] [xyz]; @@ -260,9 +261,36 @@ Line up your translations when it makes sense: 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 C and B<-w> in effect. Consider giving away -your code. Consider changing your whole world view. Consider... oh, -never mind. +code run cleanly with C and C (or B<-w>) in +effect. Consider giving away your code. Consider changing your whole +world view. Consider... oh, never mind. + +=item * + +Try to document your code and use Pod formatting in a consistent way. Here +are commonly expected conventions: + +=over 4 + +=item * + +use CE> for function, variable and module names (and more +generally anything that can be considered part of code, like filehandles +or specific values). Note that function names are considered more readable +with parentheses after their name, that is C. + +=item * + +use CE> for commands names like B or B. + +=item * + +use CE> or CE> for file names. CE> should +be the only Pod code for file names, but as most Pod formatters render it +as italic, Unix and Windows paths with their slashes and backslashes may +be less readable, and better rendered with CE>. + +=back =item *