X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=README;h=7e2c99a077ddb415370cd93d375ae0bd91bd48ce;hb=e291e59267c1f2c400cce6aa9006293ef06fa375;hp=42aec0ed1eb8457066574bf1d33e6efded37d18d;hpb=ca20ae2227f4d652532078d6e45d03d17fd625ab;p=perl%2Fmodules%2FLexical-Types.git diff --git a/README b/README index 42aec0e..7e2c99a 100644 --- a/README +++ b/README @@ -2,7 +2,7 @@ NAME Lexical::Types - Extend the semantics of typed lexicals. VERSION - Version 0.01 + Version 0.02 SYNOPSIS { @@ -17,7 +17,7 @@ SYNOPSIS DESCRIPTION This module allows you to hook the execution of typed lexicals - declarations ("my Foo $x"). In particular, it can be used to + declarations ("my Str $x"). In particular, it can be used to automatically tie or bless typed lexicals. It is not implemented with a source filter. @@ -25,33 +25,42 @@ DESCRIPTION FUNCTIONS "import [ as => [ $prefix | $mangler ] ]" Magically called when writing "use Lexical::Types". All the occurences - of "my Foo $x" in the current lexical scope will be changed to call at + of "my Str $x" in the current lexical scope will be changed to call at each run a given method in a given package. The method and package are - determined by the parameter "as" : + determined by the parameter 'as' : - * If it's left unspecified, the "TYPEDSCALAR" method in the "Foo" + * If it's left unspecified, the "TYPEDSCALAR" method in the "Str" package will be called. use Lexical::Types; my Str $x; # calls Str->TYPEDSCALAR * If a plain scalar $prefix is passed as the value, the "TYPEDSCALAR" - method in the "${prefix}::Foo" package will be used. + method in the "${prefix}::Str" package will be used. use Lexical::Types as => 'My::'; # or "as => 'My'" my Str $x; # calls My::Str->TYPEDSCALAR * If the value given is a code reference $mangler, it will be called - at compile-time with arguments 'Foo' and 'TYPEDSCALAR' and is - expected to return the desired package and method name (in that - order). If any of those is "undef", the default value will be used - instead. + at compile-time with arguments 'Str' and 'TYPEDSCALAR' and is + expected to return : - use Lexical::Types as => sub { 'My', 'new_' . lc($_[0]) }; - my Str $x; # the coderef indicates to call My->new_str + * either an empty list, in which case the current typed lexical + definition will be skipped (thus it won't be altered to trigger + a run-time hook) ; + + use Lexical::Types as => sub { return $_[0] =~ /Str/ ? () : @_ }; + my Str $x; # nothing special + my Int $y; # calls Int->TYPEDSCALAR + + * or the desired package and method name, in that order (if any of + those is "undef", the default value will be used instead). + + use Lexical::Types as => sub { 'My', 'new_' . lc($_[0]) }; + my Str $x; # the coderef indicates to call My->new_str The initializer method receives an alias to the pad entry of $x in $_[1] - and the original type name ("Foo") in $_[2]. You can either edit $_[1] + and the original type name ("Str") in $_[2]. You can either edit $_[1] in place, in which case you should return an empty list, or return a new scalar that will be copied into $x. @@ -83,8 +92,8 @@ INTEGRATION sub new_int { ... } CAVEATS - For "perl" to be able to parse "my Foo $x", the package "Foo" must be - defined somewhere, and this even if you use the "as" option to redirect + For "perl" to be able to parse "my Str $x", the package "Str" must be + defined somewhere, and this even if you use the 'as' option to redirect to another package. It's unlikely to find a workaround, as this happens deep inside the lexer, far from the reach of an extension.