From 681320fb49923509b237c32b3f809deb218f49f3 Mon Sep 17 00:00:00 2001 From: Alex Tokarev Date: Wed, 8 Nov 2017 17:58:31 -0800 Subject: [PATCH] Optionally disable importing warnings into caller package --- lib/Moo.pm | 4 +++- t/moo.t | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/lib/Moo.pm b/lib/Moo.pm index 5c7850d2..c3da748b 100644 --- a/lib/Moo.pm +++ b/lib/Moo.pm @@ -42,8 +42,10 @@ sub import { my $class = shift; _set_loaded(caller); + my $no_warnings = grep /:no_warnings/, @_; + strict->import; - warnings->import; + warnings->import unless $no_warnings; if ($INC{'Role/Tiny.pm'} and Role::Tiny->is_role($target)) { croak "Cannot import Moo into a role"; diff --git a/t/moo.t b/t/moo.t index da0b94bb..75fb9f4b 100644 --- a/t/moo.t +++ b/t/moo.t @@ -103,4 +103,38 @@ is(MyClass5->foo, 'foo with around', 'method modifier'); 'can extend Moo class with overridden new'; } +{ + no strict 'refs'; + no warnings 'redefine'; + + my $import = 0; + + local *{"warnings::import"} = sub { $import++ }; + + eval { + package MyClass8; + require Moo; + Moo->import; + }; + + ::is $import, 1, "use Moo imports warnings"; +} + +{ + no strict 'refs'; + no warnings 'redefine'; + + my $import = 0; + + local *{"warnings::import"} = sub { $import++ }; + + eval { + package MyClass9; + require Moo; + Moo->import( qw(:no_warnings) ); + }; + + ::is $import, 0, "use Moo :no_warnings"; +} + done_testing;