Always do: - Pragmatic modules ALWAYS to use in ALL packages: use strict; use warnings; - Only for packages for including package UNIVERSAL definitions use Xerl::Page::Base; - Object oriented coding style - Always use method prototypes if possible sub foo($;$) { .... } - Explicit object typing if possible my Class::Name::Here $foo = Class::Name::Here->new(); - If no real ret val, set undef; explicitly sub foo() { # Do some stuff ... # Set explicit undef ret value return undef; } - Private subs use _ as its prefix and are called only from the current package. package Xerl::Foo::Bla; . . sub _iamprivate($) { my Xerl::Foo:Bla $self = $_[0]; . . } sub iampublic($) { my Xerl::Foo:Bla $self = $_[0]; $self->_iamprivate(); return undef; } - Static subs (not OOP) are in CAPITAL letters. sub IAMSTATIC($) { print shift; return 'Hello World'; } sub iamdynamic($) { my Xerl::Foo:Bla $self = $_[0]; return Xerl::Foo::Bla::IAMSTATIC( $self->get_somevalue() ); } - Static private subs start with _ and are written in CAPITAL letters sub _IAMSTATICPRIVATE() { . . } - Use Pidy to automaically restyle the code! (make pidy) - Mark things which are still to do with TODO: at any place in the source tree. (Can be searched for using 'make todo').