e79ac7ee3a
Ask programmers to use modules where possible instead of reinventing the wheel. Use 'chomp' not 'chop' please. Fixup some mdoc.
143 lines
3.6 KiB
Groff
143 lines
3.6 KiB
Groff
.\" Copyright (c) 2000 Josef Karthauser <joe@FreeBSD.org>
|
|
.\" All rights reserved.
|
|
.\"
|
|
.\" Redistribution and use in source and binary forms, with or without
|
|
.\" modification, are permitted provided that the following conditions
|
|
.\" are met:
|
|
.\" 1. Redistributions of source code must retain the above copyright
|
|
.\" notice, this list of conditions and the following disclaimer.
|
|
.\" 2. Redistributions in binary form must reproduce the above copyright
|
|
.\" notice, this list of conditions and the following disclaimer in the
|
|
.\" documentation and/or other materials provided with the distribution.
|
|
.\"
|
|
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
|
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
.\" ARE DISCLAIMED. IN NO EVENT SHALL [your name] OR CONTRIBUTORS BE LIABLE
|
|
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
.\" SUCH DAMAGE.
|
|
.\"
|
|
.\" $FreeBSD$
|
|
.\"
|
|
.Dd October 16, 2000
|
|
.Dt STYLE.PERL 7
|
|
.Os FreeBSD
|
|
.Sh NAME
|
|
.Nm style.perl 7
|
|
.Nd "FreeBSD Perl source file style guide"
|
|
.Sh DESCRIPTION
|
|
This file specifies the preferred style for perl scripts in the
|
|
.Tn FreeBSD
|
|
source tree.
|
|
.Bd -literal -offset 0i
|
|
#
|
|
# Style guide for Perl. Based on the kernel style guide.
|
|
#
|
|
|
|
#
|
|
# VERY important single-line comments look like this.
|
|
#
|
|
|
|
# Most single-line comments look like this.
|
|
|
|
# Multi-line comments look like this. Make them real sentences.
|
|
# Fill them so they look like real paragraphs.
|
|
.Ed
|
|
.Pp
|
|
All scripts should use the
|
|
.Fa strict
|
|
module and run without warnings. For example:
|
|
.Bd -literal -offset 0i
|
|
#!/usr/bin/perl -w
|
|
|
|
use strict;
|
|
...
|
|
.Ed
|
|
.Pp
|
|
Where possible run the script with taint mode switched on. This
|
|
is documented in
|
|
.Xr perlsec 1 .
|
|
.Bd -literal -offset 0i
|
|
#!/usr/bin/perl -wT
|
|
.Ed
|
|
.Pp
|
|
All variables should be defined before use; this is enforced if operating
|
|
under
|
|
.Fa use strict .
|
|
.Pp
|
|
Scope local variables should be defined using
|
|
.Fa my
|
|
.Va $variable
|
|
and not
|
|
.Fa local
|
|
.Va $variable .
|
|
The
|
|
.Fa local
|
|
declaration should only be used when it is required, and not by
|
|
default. Lots of perl4 scripts use
|
|
.Fa local
|
|
because the
|
|
.Fa my
|
|
definition didn't exist prior to perl5.
|
|
.Bd -literal -offset 0i
|
|
sub foo {
|
|
my $var = shift;
|
|
my @list = ();
|
|
...
|
|
}
|
|
.Ed
|
|
.Pp
|
|
In most cases globals should be defined at the top of the code
|
|
using a
|
|
.Fa var
|
|
definition block:
|
|
.Bd -literal -offset 0i
|
|
use var qw($globalscalar @globalarray %globalhash);
|
|
.Ed
|
|
.Pp
|
|
In some cases it may be appropriate to use
|
|
.Fa my
|
|
.Va $variable =
|
|
.Li "value";
|
|
statements at the top of the script as an alternative to using
|
|
.Fa var
|
|
declarations.
|
|
.Pp
|
|
Whenever possible code should be run through the code checker
|
|
.Nm perl
|
|
.Ar -wc
|
|
.Ar script.pl
|
|
or
|
|
.Nm perl
|
|
.Ar -wcT
|
|
.Ar script.pl
|
|
and produce no warnings.
|
|
.Pp
|
|
Indentation and block style should follow
|
|
.Xr style 9
|
|
where applicable.
|
|
.Pp
|
|
Where possible scripts should use standard modules instead of
|
|
rewriting the code inline. It may be appropriate in some cases to
|
|
import a CPAN module into the base system to facilitate this.
|
|
.Pp
|
|
Use
|
|
.Fa chomp
|
|
instead of
|
|
.Fa chop
|
|
where appropriate.
|
|
|
|
.Sh SEE ALSO
|
|
.Xr perlsec 1 ,
|
|
.Xr style 9
|
|
.Sh HISTORY
|
|
This man page is largely based on the
|
|
.Xr style 9
|
|
man-page in
|
|
.Tn FreeBSD .
|