X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMouse.pm;h=22d07eb16a0ffd4c9859a95ff95e3dfbc1448631;hb=74f2f839994288ca48292d561c9dc2d822deae39;hp=b8e8f97f53cce48943615f87d5592cffde6dd609;hpb=11ac534bdfe4aab1f8bfb575769dee68f456c1d9;p=gitmo%2FMouse.git diff --git a/lib/Mouse.pm b/lib/Mouse.pm index b8e8f97..22d07eb 100644 --- a/lib/Mouse.pm +++ b/lib/Mouse.pm @@ -1,31 +1,22 @@ -#!/usr/bin/env perl + package Mouse; use strict; use warnings; -use base 'Exporter'; - -our $VERSION = '0.12'; use 5.006; +use base 'Exporter'; -if ($ENV{SHIKA_DEBUG}) { - *DEBUG = sub (){ 1 }; -} else { - *DEBUG = sub (){ 0 }; -} - -our $PurePerl; -$PurePerl = $ENV{SHIKA_PUREPERL} unless defined $PurePerl; +our $VERSION; +BEGIN { + $VERSION = '0.12'; -if (! $PurePerl) { - local $@; - local $^W = 0; - require XSLoader; - $PurePerl = !eval{ XSLoader::load(__PACKAGE__, $VERSION); 1 }; - warn "Failed to load XS mode: $@" if $@ && Mouse::DEBUG(); + if ($ENV{MOUSE_DEBUG}) { + *DEBUG = sub (){ 1 }; + } else { + *DEBUG = sub (){ 0 }; + } } - use Carp 'confess'; use Mouse::Util 'blessed'; @@ -85,18 +76,12 @@ sub around { } sub with { - my $meta = Mouse::Meta::Class->initialize(caller); - - my $role = shift; - my $args = shift || {}; - - confess "Mouse::Role only supports 'with' on individual roles at a time" if @_ || !ref $args; - - Mouse::load_class($role); - $role->meta->apply($meta, %$args); + Mouse::Util::apply_all_roles((caller)[0], @_); } sub import { + my $class = shift; + strict->import; warnings->import; @@ -110,7 +95,15 @@ sub import { no warnings 'redefine'; *{$caller.'::meta'} = sub { $meta }; - Mouse->export_to_level(1, @_); + if (@_) { + __PACKAGE__->export_to_level( 1, $class, @_); + } else { + # shortcut for the common case of no type character + no strict 'refs'; + for my $keyword (@EXPORT) { + *{ $caller . '::' . $keyword } = *{__PACKAGE__ . '::' . $keyword}; + } + } } sub unimport {