NAME Syntax::Feature::Simple - DWIM syntax extensions VERSION version 0.002 DESCRIPTION This is a more of a syntax extension package than a simple extension by itself. It will detect what kind of package it is imported into, and setup appropriate syntax extensions depending on the type. Moose Classes and Roles If a Moose class or role is detected, this extension will setup a "fun" keyword for function declarations, a "method" keyword, and one keyword each for "before", "after" and "around". The modifiers behave exactly like normal method declarations, except for "around" which will provide the original method in a lexical named $orig. package MyProject::MooseClassOrRole; use Moose; # or use Moose::Role # or use MooseX::Role::Parameterized, # but with body inside role { ... } use syntax qw( simple/v2 ); fun foo ($x) { ... } my $anon_f = fun ($x) { ... }; method bar ($x) { $self->say($x) } my $anon_m = method ($x) { $self->say($x) }; before baz ($x) { $self->say($x) } after baz ($x) { $self->say($x) } around baz ($x) { $self->say($self->$orig($x)) } 1; In case of a parameterizable role the right callback will be called, but compatibility with anonymous method declarations will be preserved: package MyProject::ParamRole; use MooseX::Role::Parameterized; use syntax qw( simple/v2 ); parameter method_name => (is => 'ro'); # defaults to $parameter role ($param) { my $name = $param->method_name; method "$name" ($n) { $self->say($n) } my $anon = method ($n) { $self->say($n) }; } 1; As of version 2 you will also get sugar for the "role" body that allows you to specify a signature. By default, the parameter object will be available in a variable named $parameter. Plain Packages By default, if no other kind of package type is detected, "simple/v1" will only setup the function syntax, while "simple/v2" will setup the function and the method extension. package MyProject::Util; use strictures 1; use syntax qw( simple/v2 ); fun foo ($x) { ... } my $anon_f = fun ($x) { ... }; method bar ($class: $x, $y) { ... } my $anon_m = method ($x) { ... }; 1; FUTURE CANDIDATES "simple/v*" (basic set) * "no indirect" * "use true" * Try::Tiny "simple/x*" (extended set) * Smart::Match if a valid Perl version was declared SEE ALSO Syntax::Feature::Simple::V1 Version 1 of the extension set. Syntax::Feature::Simple::V2 Version 2 of the extension set. syntax The syntax dispatching module. Syntax::Feature::Simple Contains general information about this extension. Syntax::Feature::Method Specifics about the "method" and modifier keywords. Syntax::Feature::Function Specifics about the "fun" function keyword. Moose Post-modern object-orientation. MooseX::Role::Parameterized Parameterizable roles for Moose. BUGS Please report any bugs or feature requests to bug-syntax-feature-simple@rt.cpan.org or through the web interface at: http://rt.cpan.org/Public/Dist/Display.html?Name=Syntax-Feature-Simple AUTHOR Robert 'phaylon' Sedlacek COPYRIGHT AND LICENSE This software is copyright (c) 2011 by Robert 'phaylon' Sedlacek. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.