-#!/usr/bin/env perl
+
package Mouse;
use strict;
use warnings;
+use 5.006;
use base 'Exporter';
-our $VERSION = '0.11';
-use 5.006;
+our $VERSION;
+our $PurePerl;
+
+BEGIN {
+ $VERSION = '0.12';
+
+ if ($ENV{MOUSE_DEBUG}) {
+ *DEBUG = sub (){ 1 };
+ } else {
+ *DEBUG = sub (){ 0 };
+ }
+
+ if (! defined $PurePerl && $ENV{MOUSE_PUREPERL} && $ENV{MOUSE_PUREPERL} =~ /^(.+)$/) {
+ $PurePerl = $1;
+ }
+
+ if (! $PurePerl) {
+ local $@;
+ local $^W = 0;
+ require XSLoader;
+ $PurePerl = ! eval{ XSLoader::load(__PACKAGE__, $VERSION); 1 };
+ warn "Failed to load XS mode: $@" if $@; # && Mouse::DEBUG();
+ }
+}
use Carp 'confess';
use Mouse::Util 'blessed';
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 @_;
+ confess "Mouse::Role only supports 'with' on individual roles at a time" if @_ || !ref $args;
Mouse::load_class($role);
- $role->meta->apply($meta);
+ $role->meta->apply($meta, %$args);
}
sub import {
+ my $class = shift;
+
strict->import;
warnings->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 {