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 { ... }
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;
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;
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
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.