X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=lib%2FLexical%2FTypes.pm;h=14f269957ad364a3ee8537df2da517e213e57fda;hb=28f52395e07f990ec77ca6b87352811f2a9c5f79;hp=c5bca1e792a0621ea31e10916e0c60f68476cf8d;hpb=7a753d187ec273e873d5d8a8afb9e48fed7d1955;p=perl%2Fmodules%2FLexical-Types.git diff --git a/lib/Lexical/Types.pm b/lib/Lexical/Types.pm index c5bca1e..14f2699 100644 --- a/lib/Lexical/Types.pm +++ b/lib/Lexical/Types.pm @@ -13,13 +13,13 @@ Lexical::Types - Extend the semantics of typed lexicals. =head1 VERSION -Version 0.03 +Version 0.06 =cut our $VERSION; BEGIN { - $VERSION = '0.03'; + $VERSION = '0.06'; } =head1 SYNOPSIS @@ -155,7 +155,7 @@ sub import { croak "Invalid $r reference for 'as'"; } } else { - $hint = _tag(0); + $hint = _tag(sub { @_ }); } $^H |= 0x020000; @@ -214,21 +214,44 @@ You can integrate L in your module so that using it will provide sub new_int { ... } -=head1 CAVEATS +If you prefer to use constants rather than creating empty packages, you can replace the previous example with something like this : -For C to be able to parse C, you need : + package MyTypes; -=over 4 + BEGIN { require Lexical::Types; } -=item * + 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' } + ); + } -either the C package to be defined ; + sub unimport { + Lexical::Types->unimport; + } -=item * + package MyTypes::Str; -or for C to be a constant sub returning a valid defined package. + sub new { ... } -=back + package MyTypes::Int; + + sub new { ... } + +=head1 CONSTANTS + +=head2 C + +True iff the module could have been built when thread-safety features. + +=head1 CAVEATS The restrictions on the type (being either a defined package name or a constant) apply even if you use the C<'as'> option to redirect to another package, and are unlikely to find a workaround as this happens deep inside the lexer - far from the reach of an extension.