]> git.vpit.fr Git - perl/modules/Lexical-Types.git/commitdiff
Give an example of integration with constants
authorVincent Pit <vince@profvince.com>
Sat, 7 Mar 2009 12:20:38 +0000 (13:20 +0100)
committerVincent Pit <vince@profvince.com>
Sat, 7 Mar 2009 12:20:38 +0000 (13:20 +0100)
lib/Lexical/Types.pm

index c5bca1e792a0621ea31e10916e0c60f68476cf8d..be4d71c26d30c2a484d6ae9b2688bb05b345b7a2 100644 (file)
@@ -214,6 +214,37 @@ You can integrate L<Lexical::Types> 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<perl> to be able to parse C<my Str $x>, you need :