The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
Check warnings::enabled & warnings::warn

__END__

--FILE-- abc.pm
package abc ;
use warnings "io" ;
print $^STDOUT, "ok1\n" if ! warnings::enabled('all') ;
print $^STDOUT, "ok2\n" if ! warnings::enabled("io") ;
1;
--FILE-- 
no warnings;
use abc ;
EXPECT
ok1
ok2
########

--FILE-- abc.pm
package abc ;
no warnings ;
print $^STDOUT, "ok1\n" if !warnings::enabled('all') ;
print $^STDOUT, "ok2\n" if warnings::enabled("syntax") ;
1;
--FILE-- 
use warnings 'syntax' ;
use abc ;
EXPECT
ok1
ok2
########

--FILE-- abc.pm
package abc ;
use warnings 'syntax' ;
print $^STDOUT, "ok1\n" if   warnings::enabled('io') ;
print $^STDOUT, "ok2\n" if ! warnings::enabled("syntax") ;
1;
--FILE-- 
use warnings 'io' ;
use abc ;
EXPECT
ok1
ok2
########

--FILE-- abc
no warnings ;
print $^STDOUT, "ok1\n" if !warnings::enabled('all') ;
print $^STDOUT, "ok2\n" if !warnings::enabled("syntax") ;
1;
--FILE-- 
use warnings 'syntax' ;
require "abc" ;
EXPECT
ok1
########

--FILE-- abc
use warnings 'syntax' ;
print $^STDOUT, "ok1\n" if ! warnings::enabled('all') ;
print $^STDOUT, "ok2\n" if ! warnings::enabled("syntax") ;
print $^STDOUT, "ok3\n" if ! warnings::enabled("io") ;
1;
--FILE-- 
use warnings 'io' ;
require "abc" ;
EXPECT
ok1
ok2
########

--FILE-- abc.pm
package abc ;
no warnings ;
sub check {
  print $^STDOUT, "ok1\n" if !warnings::enabled('all') ;
  print $^STDOUT, "ok2\n" if warnings::enabled("syntax") ;
}
1;
--FILE-- 
use warnings 'syntax' ;
use abc ;
abc::check() ;
EXPECT
ok1
ok2
########

--FILE-- abc.pm
package abc ;
use warnings 'io' ;
sub check {
  print $^STDOUT, "ok1\n" if ! warnings::enabled('all') ;
  print $^STDOUT, "ok2\n" if   warnings::enabled("syntax") ;
  print $^STDOUT, "ok3\n" if ! warnings::enabled("io") ;
}
1;
--FILE-- 
use warnings 'syntax' ;
use abc ;
abc::check() ;
EXPECT
ok1
ok2
ok3
########

--FILE-- abc
package abc ;
no warnings ;
sub check {
  print $^STDOUT, "ok1\n" if !warnings::enabled('all') ;
  print $^STDOUT, "ok2\n" if warnings::enabled("syntax") ;
}
1;
--FILE-- 
use warnings 'syntax' ;
require "abc" ;
abc::check() ;
EXPECT
ok1
ok2
########

--FILE-- abc
package abc ;
use warnings 'io' ;
sub check {
  print $^STDOUT, "ok1\n" if ! warnings::enabled('all') ;
  print $^STDOUT, "ok2\n" if   warnings::enabled("syntax") ;
  print $^STDOUT, "ok3\n" if ! warnings::enabled("io") ;
}
1;
--FILE-- 
use warnings 'syntax' ;
require "abc" ;
abc::check() ;
EXPECT
ok1
ok2
ok3
########

--FILE-- abc.pm
package abc ;
use warnings "io" ;
print $^STDOUT, "ok1\n" if ! warnings::enabled('all') ;
print $^STDOUT, "ok2\n" if ! warnings::enabled("io") ;
1;
--FILE-- def.pm
package def;
no warnings;
use abc ;
1;
--FILE-- 
use warnings;
use def ;
EXPECT
ok1
ok2
########

--FILE-- abc.pm
package abc ;
no warnings ;
print $^STDOUT, "ok1\n" if ! warnings::enabled('all') ;
print $^STDOUT, "ok2\n" if warnings::enabled("syntax") ;
print $^STDOUT, "ok3\n" if !warnings::enabled("io") ;
1;
--FILE-- def.pm
use warnings 'syntax' ;
print $^STDOUT, "ok4\n" if !warnings::enabled('all') ;
print $^STDOUT, "ok5\n" if !warnings::enabled("io") ;
use abc ;
1;
--FILE--
use warnings 'io' ;
use def ;
EXPECT
ok1
ok2
ok3
ok4
########

--FILE-- abc.pm
package abc ;
no warnings ;
sub check {
  print $^STDOUT, "ok1\n" if !warnings::enabled('all') ;
  print $^STDOUT, "ok2\n" if warnings::enabled("syntax") ;
}
1;
--FILE-- 
use warnings 'syntax' ;
use abc ;
try { 
  abc::check() ; 
};
print $^STDOUT, $^EVAL_ERROR ;
EXPECT
ok1
ok2
########

--FILE-- abc.pm
package abc ;
use warnings 'io' ;
sub check {
  print $^STDOUT, "ok1\n" if ! warnings::enabled('all') ;
  print $^STDOUT, "ok2\n" if   warnings::enabled("syntax") ;
  print $^STDOUT, "ok3\n" if ! warnings::enabled("io") ;
}
1;
--FILE-- 
use warnings 'syntax' ;
use abc ;
try { 
  abc::check() ; 
  } ;
print $^STDOUT, $^EVAL_ERROR ;
EXPECT
ok1
ok2
ok3
########

--FILE-- abc
package abc ;
no warnings ;
sub check {
  print $^STDOUT, "ok1\n" if !warnings::enabled('all') ;
  print $^STDOUT, "ok2\n" if warnings::enabled("syntax") ;
}
1;
--FILE-- 
use warnings 'syntax' ;
require "abc" ;
try { 
  abc::check() ; 
  } ;
print $^STDOUT, $^EVAL_ERROR ;
EXPECT
ok1
ok2
########

--FILE-- abc
package abc ;
use warnings 'io' ;
sub check {
  print $^STDOUT, "ok1\n" if !warnings::enabled('all') ;
  print $^STDOUT, "ok2\n" if warnings::enabled("syntax") ;
  print $^STDOUT, "ok3\n" if warnings::enabled("io") ;
}
1;
--FILE-- 
use warnings 'syntax' ;
require "abc" ;
try { 
  use warnings 'io' ; 
  abc::check() ; 
};
abc::check() ; 
print $^STDOUT, $^EVAL_ERROR ;
EXPECT
ok1
ok2
ok3
ok1
ok2
########

--FILE-- abc.pm
package abc ;
use warnings 'io' ;
sub check {
  print $^STDOUT, "ok1\n" if ! warnings::enabled('all') ;
  print $^STDOUT, "ok2\n" if  warnings::enabled("syntax") ;
  print $^STDOUT, "ok3\n" if ! warnings::enabled("io") ;
}
1;
--FILE-- 
use warnings 'syntax' ;
use abc ;
sub fred { abc::check() }
fred() ;
EXPECT
ok1
ok2
ok3
########

--FILE-- abc.pm
package abc ;
use warnings 'io' ;
sub check {
  print $^STDOUT, "ok1\n" if  ! warnings::enabled('all') ;
}
1;
--FILE-- 
use warnings 'syntax' ;
use abc ;
sub fred { no warnings ; abc::check() }
fred() ;
EXPECT
ok1
########

--FILE-- abc.pm
package abc ;
use warnings 'misc' ;
sub check {
  print $^STDOUT, "ok1\n" if  ! warnings::enabled('all') ;
  print $^STDOUT, "ok2\n" if  warnings::enabled("syntax") ;
  print $^STDOUT, "ok3\n" if  warnings::enabled("io") ;
  print $^STDOUT, "ok4\n" if  ! warnings::enabled("misc") ;
}
1;
--FILE-- 
use warnings 'syntax' ;
use abc ;
sub fred { use warnings 'io'  ; abc::check() }
fred() ;
EXPECT
ok1
ok2
ok3
ok4
########

# check warnings::warn
use warnings ;
try { 
    warnings::warn() 
  } ;
print $^STDOUT, $^EVAL_ERROR->description, "\n";
try { 
  warnings::warn("fred", "joe") 
  } ;
print $^STDOUT, $^EVAL_ERROR->description, "\n";
EXPECT
Usage: warnings::warn([category,] 'message')
Unknown warnings category 'fred'
########

# check warnings::warnif
use warnings ;
try { 
  warnings::warnif() 
} ;
print $^STDOUT, $^EVAL_ERROR->description, "\n";
try { 
  warnings::warnif("fred", "joe") 
} ;
print $^STDOUT, $^EVAL_ERROR->description, "\n";
EXPECT
Usage: warnings::warnif([category,] 'message')
Unknown warnings category 'fred'
########

--FILE-- abc.pm
package abc ;
use warnings 'misc' ;
sub check { warnings::warn("io", "hello") }
1;
--FILE--
use warnings "io" ;
use abc;
abc::check() ;
EXPECT
hello at .../warnings.pm line xxx.
    warnings::warn called at abc.pm line 3 character 13.
    abc::check called at - line 3 character 1.
########

--FILE-- abc.pm
package abc ;
use warnings 'misc' ;
sub check { warnings::warn("misc", "hello") }
1;
--FILE--
use warnings "io" ;
use abc;
abc::check() ;
EXPECT
hello at .../warnings.pm line xxx.
    warnings::warn called at abc.pm line 3 character 13.
    abc::check called at - line 3 character 1.
########

--FILE-- abc.pm
package abc ;
use warnings 'misc' ;
sub check { warnings::warn("io", "hello") }
1;
--FILE--
use warnings < qw( FATAL deprecated ) ;
use abc;
try { 
    abc::check() ; 
  } ;
print $^STDOUT, "[[$^EVAL_ERROR]]\n";
EXPECT
hello at .../warnings.pm line xxx.
    warnings::warn called at abc.pm line 3 character 13.
    abc::check called at - line 4 character 5.
    (eval) called at - line 3 character 1.
[[]]
########

--FILE-- abc.pm
package abc ;
use warnings 'misc' ;
sub check { warnings::warn("io", "hello") }
1;
--FILE--
use warnings < qw( FATAL io ) ;
use abc;
try { 
  abc::check() ; 
} ;
print $^STDOUT, "[[$($^EVAL_ERROR->description)]]\n";
EXPECT
[[hello]]
########
-W
--FILE-- abc.pm
package abc ;
use warnings "io" ;
print $^STDOUT, "ok1\n" if warnings::enabled("io") ;
print $^STDOUT, "ok2\n" if warnings::enabled("all") ;
1;
--FILE-- 
no warnings;
use abc ;
EXPECT
ok1
ok2
########
-X
--FILE-- abc.pm
package abc ;
use warnings "io" ;
print $^STDOUT, "ok1\n" if !warnings::enabled("io") ;
print $^STDOUT, "ok2\n" if !warnings::enabled("all") ;
1;
--FILE-- 
use warnings;
use abc ;
EXPECT
ok1
ok2
########

--FILE-- abc.pm
package abc ;
no warnings ;
sub check {
  print $^STDOUT, "ok\n" if ! warnings::enabled() ;
}
1;
--FILE-- 
use warnings 'syntax' ;
use abc ;
abc::check() ;
EXPECT
package 'abc' not registered for warnings at .../warnings.pm line xxx.
    warnings::__chk called at .../warnings.pm line xxx.
    warnings::enabled called at abc.pm line 4 character 31.
    abc::check called at - line 3 character 1.
########

--FILE-- abc.pm
package abc ;
no warnings ;
sub check {
  warnings::warn("fred") ;
}
1;
--FILE-- 
use warnings 'syntax' ;
use abc ;
abc::check() ;
EXPECT
package 'abc' not registered for warnings at .../warnings.pm line xxx.
    warnings::__chk called at .../warnings.pm line xxx.
    warnings::warn called at abc.pm line 4 character 3.
    abc::check called at - line 3 character 1.
########

--FILE-- abc.pm
package abc ;
no warnings ;
sub check {
  warnings::warnif("fred") ;
}
1;
--FILE-- 
use warnings 'syntax' ;
use abc ;
abc::check() ;
EXPECT
package 'abc' not registered for warnings at .../warnings.pm line xxx.
    warnings::__chk called at .../warnings.pm line xxx.
    warnings::warnif called at abc.pm line 4 character 3.
    abc::check called at - line 3 character 1.
########

--FILE-- abc.pm
package abc ;
use warnings 'io' ;
use warnings::register ;
sub check {
  print $^STDOUT, "ok1\n" if  warnings::enabled ;
  print $^STDOUT, "ok2\n" if  warnings::enabled("syntax") ;
  print $^STDOUT, "ok3\n" if !warnings::enabled("io") ;
}
1;
--FILE-- 
use warnings 'syntax' ;
use abc ;
use warnings 'abc' ;
abc::check() ;
EXPECT
ok1
ok2
ok3
########

--FILE-- abc.pm
package abc ;
use warnings 'io' ;
use warnings::register ;
sub check {
  print $^STDOUT, "ok1\n" if !warnings::enabled ;
  print $^STDOUT, "ok2\n" if  warnings::enabled("syntax") ;
  print $^STDOUT, "ok3\n" if !warnings::enabled("io") ;
}
1;
--FILE-- 
use warnings 'syntax' ;
use abc ;
abc::check() ;
EXPECT
ok1
ok2
ok3
########

--FILE-- abc.pm
package abc ;
no warnings ;
use warnings::register ;
sub check {
  print $^STDOUT, "ok1\n" if warnings::enabled ;
  print $^STDOUT, "ok2\n" if warnings::enabled("syntax") ;
}
1;
--FILE-- 
use warnings 'syntax' ;
use abc ;
use warnings 'abc' ;
try { abc::check() ; };
print $^STDOUT, $^EVAL_ERROR ;
EXPECT
ok1
ok2
########

--FILE-- abc.pm
package abc ;
use warnings 'io' ;
use warnings::register ;
sub check {
  print $^STDOUT, "ok1\n" if !warnings::enabled ;
  print $^STDOUT, "ok2\n" if  warnings::enabled("syntax") ;
  print $^STDOUT, "ok3\n" if !warnings::enabled("io") ;
}
1;
--FILE-- 
use warnings 'syntax' ;
use abc ;
try { abc::check() ; } ;
print $^STDOUT, $^EVAL_ERROR ;
EXPECT
ok1
ok2
ok3
########

--FILE-- abc.pm
package abc ;
use warnings 'io' ;
use warnings::register ;
sub check {
  print $^STDOUT, "ok1\n" if  warnings::enabled ;
  print $^STDOUT, "ok2\n" if  warnings::enabled("syntax") ;
  print $^STDOUT, "ok3\n" if !warnings::enabled("io") ;
}
1;
--FILE-- 
use warnings 'syntax' ;
use abc ;
use warnings 'abc' ;
sub fred { abc::check() }
fred() ;
EXPECT
ok1
ok2
ok3
########

--FILE-- abc.pm
package abc ;
use warnings 'io' ;
use warnings::register ;
sub check {
  print $^STDOUT, "ok1\n" if  ! warnings::enabled ;
}
1;
--FILE-- 
use warnings 'syntax' ;
use abc ;
sub fred { no warnings ; abc::check() }
fred() ;
EXPECT
ok1
########

--FILE-- abc.pm
package abc ;
use warnings 'misc' ;
use warnings::register;
sub check {
  print $^STDOUT, "ok1\n" if  warnings::enabled ;
  print $^STDOUT, "ok2\n" if  warnings::enabled("syntax") ;
  print $^STDOUT, "ok3\n" if  warnings::enabled("io") ;
  print $^STDOUT, "ok4\n" if  ! warnings::enabled("misc") ;
}
1;
--FILE-- 
use warnings 'syntax' ;
use abc ;
use warnings 'abc' ;
sub fred { use warnings 'io'  ; abc::check() }
fred() ;
EXPECT
ok1
ok2
ok3
ok4
########

--FILE-- abc.pm
package abc ;
use warnings 'misc' ;
use warnings::register;
sub check { warnings::warn("hello") }
1;
--FILE--
use abc;
use warnings "abc" ;
abc::check() ;
EXPECT
hello at .../warnings.pm line xxx.
    warnings::warn called at abc.pm line 4 character 13.
    abc::check called at - line 3 character 1.
########

--FILE-- abc.pm
package abc ;
use warnings::register;
sub check { warnings::warn("hello") }
1;
--FILE--
use abc;
abc::check() ;
EXPECT
hello at .../warnings.pm line xxx.
    warnings::warn called at abc.pm line 3 character 13.
    abc::check called at - line 2 character 1.
########

--FILE-- abc.pm
package abc ;
use warnings::register ;
sub check { warnings::warn("hello") }
1;
--FILE--
use abc;
use warnings < qw( FATAL deprecated ) ;
try {
    abc::check() ; 
  } ;
print $^STDOUT, "[[$^EVAL_ERROR]]\n";
EXPECT
hello at .../warnings.pm line xxx.
    warnings::warn called at abc.pm line 3 character 13.
    abc::check called at - line 4 character 5.
    (eval) called at - line 3 character 1.
[[]]
########

--FILE-- abc.pm
package abc ;
use warnings::register ;
sub check { warnings::warn("hello") }
1;
--FILE--
use abc;
use warnings < qw( FATAL abc ) ;
try { 
  abc::check() ; 
  } ;
print $^STDOUT, "[[$($^EVAL_ERROR->description)]]\n";
EXPECT
[[hello]]
########
-W
--FILE-- abc.pm
package abc ;
use warnings "io" ;
use warnings::register ;
sub check { 
  print $^STDOUT, "ok1\n" if warnings::enabled() ;
  print $^STDOUT, "ok2\n" if warnings::enabled("io") ;
  print $^STDOUT, "ok3\n" if warnings::enabled("all") ;
}
1;
--FILE-- 
no warnings;
use abc ;
abc::check() ;
EXPECT
ok1
ok2
ok3
########
-X
--FILE-- abc.pm
package abc ;
use warnings "io" ;
use warnings::register ;
sub check { 
  print $^STDOUT, "ok1\n" if !warnings::enabled() ;
  print $^STDOUT, "ok2\n" if !warnings::enabled("io") ;
  print $^STDOUT, "ok3\n" if !warnings::enabled("all") ;
}
1;
--FILE-- 
no warnings;
use abc ;
abc::check() ;
EXPECT
ok1
ok2
ok3
########

--FILE-- abc.pm
package abc ;
use warnings "io" ;
use warnings::register ;
sub check { 
  print $^STDOUT, "ok1\n" if warnings::enabled() ;
  print $^STDOUT, "ok2\n" if warnings::enabled("io") ;
  print $^STDOUT, "ok3\n" if warnings::enabled("all") ;
}
1;
--FILE-- 
use warnings 'all';
use abc ;
abc::check() ;
EXPECT
ok1
ok2
ok3
########

--FILE-- abc.pm
package abc ;
use warnings "io" ;
use warnings::register ;
sub check { 
  print $^STDOUT, "ok1\n" if !warnings::enabled() ;
  print $^STDOUT, "ok2\n" if !warnings::enabled("io") ;
  print $^STDOUT, "ok3\n" if !warnings::enabled("all") ;
}
1;
--FILE-- 
use abc ;
no warnings ;
abc::check() ;
EXPECT
ok1
ok2
ok3
########

--FILE-- abc.pm
package abc ;
use warnings "io" ;
use warnings::register ;
sub check { 
  print $^STDOUT, "ok1\n" if !warnings::enabled() ;
  print $^STDOUT, "ok2\n" if !warnings::enabled("io") ;
  print $^STDOUT, "ok3\n" if !warnings::enabled("all") ;
  warnings::warnif("my message 1") ;
  warnings::warnif('abc', "my message 2") ;
  warnings::warnif('io', "my message 3") ;
  warnings::warnif('all', "my message 4") ;
}
1;
--FILE-- 
use abc ;
use warnings 'abc';
no warnings ;
abc::check() ;
EXPECT
ok1
ok2
ok3
########

--FILE-- abc.pm
package abc ;
use warnings "io" ;
use warnings::register ;
sub check { 
  print $^STDOUT, "abc self" . (warnings::enabled() ?? "" !! " not") . " enabled\n" ;
  print $^STDOUT, "abc def"  . (warnings::enabled('def') ?? "" !! " not") . " enabled\n" ;
  print $^STDOUT, "abc all"  . (warnings::enabled('all') ?? "" !! " not") . " enabled\n" ;
}
1;
--FILE-- def.pm
package def ;
use warnings "io" ;
use warnings::register ;
sub check { 
  print $^STDOUT, "def self" . (warnings::enabled() ?? "" !! " not") . " enabled\n" ;
  print $^STDOUT, "def abc"  . (warnings::enabled('abc') ?? "" !! " not") . " enabled\n" ;
  print $^STDOUT, "def all"  . (warnings::enabled('all') ?? "" !! " not") . " enabled\n" ;
}
1;
--FILE-- 
use abc ;
use def ;
use warnings 'abc';
abc::check() ;
def::check() ;
no warnings 'abc'  ;
use warnings 'def'  ;
abc::check() ;
def::check() ;
use warnings 'abc'  ;
use warnings 'def'  ;
abc::check() ;
def::check() ;
no warnings 'abc'  ;
no warnings 'def'  ;
abc::check() ;
def::check() ;
use warnings;
abc::check() ;
def::check() ;
no warnings 'abc' ;
abc::check() ;
def::check() ;
EXPECT
abc self enabled
abc def not enabled
abc all not enabled
def self not enabled
def abc enabled
def all not enabled
abc self not enabled
abc def enabled
abc all not enabled
def self enabled
def abc not enabled
def all not enabled
abc self enabled
abc def enabled
abc all not enabled
def self enabled
def abc enabled
def all not enabled
abc self not enabled
abc def not enabled
abc all not enabled
def self not enabled
def abc not enabled
def all not enabled
abc self enabled
abc def enabled
abc all enabled
def self enabled
def abc enabled
def all enabled
abc self not enabled
abc def enabled
abc all not enabled
def self enabled
def abc not enabled
def all not enabled
########
-w
--FILE-- abc.pm
package abc ;
no warnings ;
use warnings::register ;
sub check { 
  print $^STDOUT, "ok1\n" if warnings::enabled() ;
  print $^STDOUT, "ok2\n" if warnings::enabled("io") ;
  print $^STDOUT, "ok3\n" if warnings::enabled("all") ;
}
1;
--FILE-- 
use abc ;
abc::check() ;
EXPECT
ok1
ok2
ok3
########
-w
--FILE-- abc.pm
package abc ;
no warnings ;
use warnings::register ;
sub check { 
  print $^STDOUT, "ok1\n" if !warnings::enabled() ;
  print $^STDOUT, "ok2\n" if !warnings::enabled("io") ;
  print $^STDOUT, "ok3\n" if !warnings::enabled("all") ;
}
1;
--FILE-- 
use abc ;
use warnings 'abc';
no warnings ;
abc::check() ;
EXPECT
ok1
ok2
ok3
########

--FILE-- abc.pm
package abc ;
no warnings ;
use warnings::register ;
sub check { 
  print $^STDOUT, "ok1\n" if !warnings::enabled() ;
  print $^STDOUT, "ok2\n" if !warnings::enabled("io") ;
  print $^STDOUT, "ok3\n" if !warnings::enabled("all") ;
  warnings::warnif("my message 1") ;
  warnings::warnif('abc', "my message 2") ;
  warnings::warnif('io', "my message 3") ;
  warnings::warnif('all', "my message 4") ;
}
1;
--FILE-- 
use abc ;
use warnings 'abc';
no warnings ;
BEGIN { $^WARNING = 1 ; }
abc::check() ;
EXPECT
ok1
ok2
ok3
########

--FILE-- abc.pm
package abc ;
no warnings ;
use warnings::register ;
sub check { 
  print $^STDOUT, "ok1\n" if !warnings::enabled() ;
  print $^STDOUT, "ok2\n" if !warnings::enabled("io") ;
  print $^STDOUT, "ok3\n" if !warnings::enabled("all") ;
}
1;
--FILE-- 
use abc ;
use warnings 'abc';
no warnings ;
$^WARNING = 1 ;
abc::check() ;
EXPECT
ok1
ok2
ok3
########

--FILE-- abc.pm
$^OUTPUT_AUTOFLUSH = 1;
package abc ;
no warnings ;
use warnings::register ;
sub check { 
  print $^STDOUT, "ok1\n" if  warnings::enabled() ;
  print $^STDOUT, "ok2\n" if !warnings::enabled("io") ;
  print $^STDOUT, "ok3\n" if !warnings::enabled("all") ;
  print $^STDOUT, "ok4\n" if  warnings::enabled("abc") ;
  warnings::warn("my message 1") ;
  warnings::warnif("my message 2") ;
  warnings::warnif('abc', "my message 3") ;
  warnings::warnif('io', "my message 4") ;
  warnings::warnif('all', "my message 5") ;
}
sub in2 { no warnings ; check() }
sub in1 { no warnings ; in2() }
1;
--FILE-- 
use abc ;
use warnings 'abc';
abc::in1() ;
EXPECT
ok2
ok3
my message 1 at .../warnings.pm line xxx.
    warnings::warn called at abc.pm line 10 character 3.
    abc::check called at abc.pm line 16 character 25.
    abc::in2 called at abc.pm line 17 character 25.
    abc::in1 called at - line 3 character 1.
########

--FILE-- def.pm
package def ;
no warnings ;
use warnings::register ;
sub check { 
  print $^STDOUT, "ok1\n" if  warnings::enabled() ;
  print $^STDOUT, "ok2\n" if !warnings::enabled("io") ;
  print $^STDOUT, "ok3\n" if !warnings::enabled("all") ;
  print $^STDOUT, "ok4\n" if  warnings::enabled("def") ;
  warnings::warn("my message 1") ;
  warnings::warnif("my message 2") ;
  warnings::warnif('def', "my message 3") ;
  warnings::warnif('io', "my message 4") ;
  warnings::warnif('all', "my message 5") ;
}
sub in2 { no warnings ; check() }
sub in1 { no warnings ; in2() }
1;
--FILE-- abc.pm
$^OUTPUT_AUTOFLUSH = 1;
package abc ;
use def ;
use warnings 'def';
sub in1 { def::in1() ; }
1;
--FILE-- 
use abc ;
no warnings;
abc::in1() ;
EXPECT
ok2
ok3
my message 1 at .../warnings.pm line xxx.
    warnings::warn called at def.pm line 9 character 3.
    def::check called at def.pm line 15 character 25.
    def::in2 called at def.pm line 16 character 25.
    def::in1 called at abc.pm line 5 character 11.
    abc::in1 called at - line 3 character 1.