X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=lib%2FLexical%2FTypes.pm;h=dcfd0e03569e36e930bea6361e75b5ac43eb15eb;hb=27448f68875d0f4bd02914e437eb8c3d91390732;hp=138fcf588cb0187cc61da5646fd8a6997ae5ceab;hpb=7cff22e4b5498f801c1d9be1dcab213a39395d0a;p=perl%2Fmodules%2FLexical-Types.git diff --git a/lib/Lexical/Types.pm b/lib/Lexical/Types.pm index 138fcf5..dcfd0e0 100644 --- a/lib/Lexical/Types.pm +++ b/lib/Lexical/Types.pm @@ -36,7 +36,7 @@ BEGIN { =head1 DESCRIPTION -This module allows you to hook the execution of typed lexicals declarations (C). +This module allows you to hook the execution of typed lexicals declarations (C). In particular, it can be used to automatically tie or bless typed lexicals. It is B implemented with a source filter. @@ -53,28 +53,28 @@ BEGIN { =head2 C<< import [ as => [ $prefix | $mangler ] ] >> Magically called when writing C. -All the occurences of C in the current lexical scope will be changed to call at each run a given method in a given package. +All the occurences of C 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 C : =over 4 =item * -If it's left unspecified, the C method in the C package will be called. +If it's left unspecified, the C method in the C package will be called. use Lexical::Types; my Str $x; # calls Str->TYPEDSCALAR =item * -If a plain scalar C<$prefix> is passed as the value, the C method in the C<${prefix}::Foo> package will be used. +If a plain scalar C<$prefix> is passed as the value, the C method in the C<${prefix}::Str> package will be used. use Lexical::Types as => 'My::'; # or "as => 'My'" my Str $x; # calls My::Str->TYPEDSCALAR =item * -If the value given is a code reference C<$mangler>, it will be called at compile-time with arguments C<'Foo'> and C<'TYPEDSCALAR'> and is expected to return : +If the value given is a code reference C<$mangler>, it will be called at compile-time with arguments C<'Str'> and C<'TYPEDSCALAR'> and is expected to return : =over 4 @@ -97,7 +97,7 @@ or the desired package and method name, in that order (if any of those is C in C<$_[1]> and the original type name (C) in C<$_[2]>. +The initializer method receives an alias to the pad entry of C<$x> in C<$_[1]> and the original type name (C) in C<$_[2]>. You can either edit C<$_[1]> in place, in which case you should return an empty list, or return a new scalar that will be copied into C<$x>. =cut @@ -165,7 +165,7 @@ You can integrate L in your module so that using it will provide =head1 CAVEATS -For C to be able to parse C, the package C must be defined somewhere, and this even if you use the C option to redirect to another package. +For C to be able to parse C, the package C must be defined somewhere, and this even if you use the C 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. Only one mangler or prefix can be in use at the same time in a given scope.