in reply to Re^4: OX and routing: how to declare something like /api/action.:format ($DEBUG++ MANIFEST)
in thread OX and routing: how to declare something like /api/action.:format

Keyword::Simple is super easy to use. You choose a keyword, say, "foo", and set up a handler for it like this:

package My::Keyword; use Keyword::Simple; sub import { Keyword::Simple::define(foo => \&_parse_foo); } sub _parse_foo { ...; } 1;

Then when someone uses your keyword (this is at compile time!) the _parse_foo sub will be called. It will be given a single parameter: a scalar ref - the reference to the string of Perl code currently being compiled. Now the _parse_foo can change that string, to change what gets compiled by Perl.

Syntax::Keyword::Val is a really simple example. The val keyword simply gets rewritten to Data::Lock::dlock my, so when people code this:

val $foo = 42;

That Perl code is rewritten to:

Data::Lock::dlock my $foo = 42;

Moops employs a lot of Keyword::Simple trickery.

use Moops; class Cow :rw { has name => (default => 'Ermintrude') }; say Cow->new->name
  • Comment on Re^5: OX and routing: how to declare something like /api/action.:format ($DEBUG++ MANIFEST)
  • Select or Download Code

Replies are listed 'Best First'.
Re^6: OX and routing: how to declare something like /api/action.:format ($DEBUG++ MANIFEST)
by mascip (Pilgrim) on Dec 09, 2013 at 09:30 UTC
    Cheers Toby! You made me much more confident to use it :-)