Coding guidelines

These rules apply to perl and php, unless otherwise mentioned.

General rules

spaces instead of tabs

indent is 4 spaces

cuddled else:

if ($a > $b) {
$a++;
} else {
$b++;
}

Line-length: usually <80 characters, not more than 120 chars

translate parameter from @_ to names in start of sub

Documentation

POD(perl)/Doxygen(php) API documentation for modules, close to code

POD(perl) documentation for scripts (pod2usage)

Name-convention

variables: lower case, underscore splits words

constants: upper case, underscore splits words

functions: lower case, underscore splits words

modules/classes: upper case first, camel case splits words

Perltidy configuration

The following Perltidy configuration can be used as a guideline for formatting the code in Metamod. Don't use perl-tidy blindly on code in particular on others code! Use perltidy for diff.

# make some defaults explicit to document the decision
--indent-columns=4
--cuddled-else
--indent-block-comments
--paren-tightness=1
--square-bracket-tightness=1
--brace-tightness=1
--block-brace-tightness=0
-nbl
-nsbl
--static-block-comments
# deviations from the default
--maximum-line-length=120
--continuation-indentation=4
--opening-brace-always-on-right
--closing-token-indentation=0

Perl Template

Basic module template

This is a template for basic module.

package <package name>; =begin LICENSE METAMOD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. METAMOD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with METAMOD; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA =end LICENSE =cut use strict; use warnings; =head1 NAME <package name> - <description> =head1 SYNOPSIS =head1 DESCRIPTION =head1 FUNCTIONS/METHODS =cut <your code goes here> =head1 LICENSE GPLv2 L<http://www.gnu.org/licenses/gpl-2.0.html> =cut 1;

Catalyst controller template

This template can be used for new Catalyst controllers.

package <package name>; =begin LICENSE METAMOD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. METAMOD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with METAMOD; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA =end LICENSE =cut BEGIN {extends 'Catalyst::Controller'; } =head1 NAME <package name> - <description> =head1 DESCRIPTION =head1 METHODS =cut =head2 auto =cut sub auto :Private { my ( $self, $c ) = @_; # Controller specific initialisation for each request. } =head2 index =cut sub index : Path("replace with absolute path") { my ( $self, $c ) = @_; } # # Remove comment if you want a controller specific begin(). This # will override the less specific begin() # #sub begin { # my ( $self, $c ) = @_; #} # # Remove comment if you want a controller specific end(). This # will override the less specific end() # #sub end { # my ( $self, $c ) = @_; #} __PACKAGE__->meta->make_immutable; =head1 LICENSE GPLv2 L<http://www.gnu.org/licenses/gpl-2.0.html> =cut 1;

Script

PHP Template