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 <rs@474.at>
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.