.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is turned on, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .ie \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . nr % 0 . rr F .\} .el \{\ . de IX .. .\} .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "Mojolicious::Guides::CodingGuidelines 3pm" .TH Mojolicious::Guides::CodingGuidelines 3pm "2012-09-05" "perl v5.14.2" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" Mojolicious::Guides::CodingGuidelines \- Coding guidelines .SH "OVERVIEW" .IX Header "OVERVIEW" This document describes the coding guidelines that are the foundations of Mojo and Mojolicious development. .PP Please do not send patches unless you agree with them. .SH "MISSION STATEMENT" .IX Header "MISSION STATEMENT" Mojo is a runtime environment for Perl real-time web frameworks. It provides all the basic tools and helpers needed to write simple web applications and higher level web frameworks such as Mojolicious. .PP All components should be reusable in other projects and in a UNIXish way only loosely coupled. .PP Especially for people new to Perl it should be as easy as possible to install Mojolicious and get started. Writing web applications can be one of the most fun ways to learn a language! .PP For developers of other web frameworks it should be possible to reuse all the infrastructure and just consider the higher levels of the Mojolicious distribution an example application. .SH "RULES" .IX Header "RULES" .RS 2 Web development should be easy and fun, this is what we optimize for. .Sp The web is a moving target, to stay relevant we have to stay in motion too. .Sp Keep it simple, no magic unless absolutely necessary. .Sp The installation process should be as fast and painless as possible. (Less than a minute on most common hardware is a good rule of thumb) .Sp The addition and modification of features is decided by majority vote or the pumpking. .Sp Any core developer may nominate a new one, who must then be accepted by a 2/3 majority vote. .Sp The pumpking has veto rights and may select his successor. .Sp It's not a feature without a test and documentation. .Sp A feature is only needed when the majority of the userbase benefits from it. .Sp Features may only be changed in a major release or after being deprecated for at least 3 months. .Sp Refactoring and deprecations should be avoided if no important feature depends on it. .Sp New features can be marked as experimental to be excluded from deprecation policies. .Sp A major release is signaled by a new major version number and a unique code name based on a unicode character. .Sp Only add dependencies if absolutely necessary and make them optional if possible. .Sp Domain specific languages should be avoided in favor of Perl-ish solutions. .Sp No inline \s-1POD\s0. .Sp Documentation belongs to the guides, module \s-1POD\s0 is just an \s-1API\s0 reference. .Sp The main focus of the included documentation should be on examples, no walls of text. (An example for every one or two sentences is a good rule of thumb) .Sp Everything should be ordered alphabetically if possible. .Sp The master source code repository should always be kept in a stable state, use feature branches for actual development. .Sp Code has to be run through Perl::Tidy with the included \f(CW\*(C`.perltidyrc\*(C'\fR, and everything should look like it was written by a single person. .Sp Code should be organized in blocks and those blocks should be commented. .Sp No spaghetti code. .Sp Comments should be correctly capitalized, and funny if possible, punctuation is optional if it doesn't increase readability. .Sp Every file should contain at least one quote from \f(CW\*(C`The Simpsons\*(C'\fR or \&\f(CW\*(C`Futurama\*(C'\fR. .Sp No names outside of \f(CW\*(C`Mojolicious.pm\*(C'\fR. .Sp No Elitism. .Sp Peace! .RE .SH "MORE" .IX Header "MORE" You can continue with Mojolicious::Guides now or take a look at the Mojolicious wiki , which contains a lot more documentation and examples by many different authors.