From: Vincent Pit Date: Sat, 7 Mar 2009 12:20:38 +0000 (+0100) Subject: Give an example of integration with constants X-Git-Tag: v0.04~3 X-Git-Url: http://git.vpit.fr/?p=perl%2Fmodules%2FLexical-Types.git;a=commitdiff_plain;h=e5180e775fa6b3bef100a42bd7899aba3627df8b Give an example of integration with constants --- diff --git a/lib/Lexical/Types.pm b/lib/Lexical/Types.pm index c5bca1e..be4d71c 100644 --- a/lib/Lexical/Types.pm +++ b/lib/Lexical/Types.pm @@ -214,6 +214,37 @@ You can integrate L in your module so that using it will provide sub new_int { ... } +If you prefer to use constants rather than creating empty packages, you can replace the previous example with something like this : + + package MyTypes; + + BEGIN { require Lexical::Types; } + + sub import { + my $pkg = caller; + for (qw/Str Int/) { + my $type = __PACKAGE__ . '::' . $_; + no strict 'refs'; + no warnings 'redefine'; + *{$pkg.'::'.$_} = eval "sub () { '$type' }"; + } + Lexical::Types->import( + as => sub { $_[0] => 'new' } + ); + } + + sub unimport { + Lexical::Types->unimport; + } + + package MyTypes::Str; + + sub new { ... } + + package MyTypes::Int; + + sub new { ... } + =head1 CAVEATS For C to be able to parse C, you need :