From: Lukas Mai Date: Mon, 18 Jun 2012 14:24:40 +0000 (+0200) Subject: implement 'classmethod' keyword type X-Git-Tag: v0.06~7 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=a23979e19f7ed9c169b640d6c1079bd4f2a1833f;p=p5sagit%2FFunction-Parameters.git implement 'classmethod' keyword type --- diff --git a/lib/Function/Parameters.pm b/lib/Function/Parameters.pm index 0f4a82d..3a47996 100644 --- a/lib/Function/Parameters.pm +++ b/lib/Function/Parameters.pm @@ -34,6 +34,11 @@ my %type_map = ( shift => '$self', attrs => ':method', }, + classmethod => { + name => 'optional', + shift => '$class', + attrs => ':method', + }, ); sub import { @@ -180,14 +185,15 @@ that you pass a hash reference in the import list: use Function::Parameters { proc => 'function', meth => 'method' }; # -or- use Function::Parameters { proc => 'function' }; # -or- - use Function::Parameters { meth => 'method' }; + use Function::Parameters { meth => 'method' }; # etc. The first line creates two keywords, C and C (for defining functions and methods, respectively). The last two lines only create one keyword. Generally the hash keys can be any identifiers you want while the -values have to be either C, C, or a hash reference (see -below). The difference between C and C is that Cs -automatically L their first argument into C<$self>. +values have to be either C, C, C or a hash +reference (see below). The difference between C and C is that +Cs automatically L their first argument into +C<$self> (Cs are similar but shift into C<$class>). The following shortcuts are available: @@ -256,9 +262,11 @@ turns into =back -Plain C<'function'> is equivalent to C<< { name => 'optional' } >>, and plain +Plain C<'function'> is equivalent to C<< { name => 'optional' } >>, plain C<'method'> is equivalent to -C<< { name => 'optional', shift => '$self', attrs => ':method' } >>. +C<< { name => 'optional', shift => '$self', attrs => ':method' } >>, and plain +C<'classmethod'> is equivalent to +C<< { name => 'optional', shift => '$class', attrs => ':method' } >>. =head2 Syntax and generated code