1Check warnings::enabled, warnings::warn and other functionality of
2warnings.pm.
3
4__END__
5
6--FILE-- abc0.pm
7package abc0 ;
8use warnings "io" ;
9print "ok1\n" if ! warnings::enabled('all') ;
10print "ok2\n" if ! warnings::enabled("io") ;
111;
12--FILE--
13no warnings;
14use abc0 ;
15EXPECT
16ok1
17ok2
18########
19
20--FILE-- abc1.pm
21package abc1 ;
22no warnings ;
23print "ok1\n" if !warnings::enabled('all') ;
24print "ok2\n" if warnings::enabled("syntax") ;
251;
26--FILE--
27use warnings 'syntax' ;
28use abc1 ;
29EXPECT
30ok1
31ok2
32########
33
34--FILE-- abc2.pm
35package abc2 ;
36use warnings 'syntax' ;
37print "ok1\n" if   warnings::enabled('io') ;
38print "ok2\n" if ! warnings::enabled("syntax") ;
391;
40--FILE--
41use warnings 'io' ;
42use abc2 ;
43EXPECT
44ok1
45ok2
46########
47
48--FILE-- abc3
49no warnings ;
50print "ok1\n" if !warnings::enabled('all') ;
51print "ok2\n" if !warnings::enabled("syntax") ;
521;
53--FILE--
54use warnings 'syntax' ;
55require "abc3" ;
56EXPECT
57ok1
58ok2
59########
60
61--FILE-- abc4
62use warnings 'syntax' ;
63print "ok1\n" if ! warnings::enabled('all') ;
64print "ok2\n" if ! warnings::enabled("syntax") ;
65print "ok3\n" if ! warnings::enabled("io") ;
661;
67--FILE--
68use warnings 'io' ;
69require "abc4" ;
70EXPECT
71ok1
72ok2
73ok3
74########
75
76--FILE-- abc5.pm
77package abc5 ;
78no warnings ;
79sub check {
80  print "ok1\n" if !warnings::enabled('all') ;
81  print "ok2\n" if warnings::enabled("syntax") ;
82}
831;
84--FILE--
85use warnings 'syntax' ;
86use abc5 ;
87abc5::check() ;
88EXPECT
89ok1
90ok2
91########
92
93--FILE-- abc6.pm
94package abc6 ;
95use warnings 'io' ;
96sub check {
97  print "ok1\n" if ! warnings::enabled('all') ;
98  print "ok2\n" if   warnings::enabled("syntax") ;
99  print "ok3\n" if ! warnings::enabled("io") ;
100}
1011;
102--FILE--
103use warnings 'syntax' ;
104use abc6 ;
105abc6::check() ;
106EXPECT
107ok1
108ok2
109ok3
110########
111
112--FILE-- abc7
113package abc7 ;
114no warnings ;
115sub check {
116  print "ok1\n" if !warnings::enabled('all') ;
117  print "ok2\n" if warnings::enabled("syntax") ;
118}
1191;
120--FILE--
121use warnings 'syntax' ;
122require "abc7" ;
123abc7::check() ;
124EXPECT
125ok1
126ok2
127########
128
129--FILE-- abc8
130package abc8 ;
131use warnings 'io' ;
132sub check {
133  print "ok1\n" if ! warnings::enabled('all') ;
134  print "ok2\n" if   warnings::enabled("syntax") ;
135  print "ok3\n" if ! warnings::enabled("io") ;
136}
1371;
138--FILE--
139use warnings 'syntax' ;
140require "abc8" ;
141abc8::check() ;
142EXPECT
143ok1
144ok2
145ok3
146########
147
148--FILE-- abc9.pm
149package abc9 ;
150use warnings "io" ;
151print "ok1\n" if ! warnings::enabled('all') ;
152print "ok2\n" if ! warnings::enabled("io") ;
1531;
154--FILE-- def.pm
155package def;
156no warnings;
157use abc9 ;
1581;
159--FILE--
160use warnings;
161use def ;
162EXPECT
163ok1
164ok2
165########
166
167--FILE-- abc10.pm
168package abc10 ;
169no warnings ;
170print "ok1\n" if ! warnings::enabled('all') ;
171print "ok2\n" if warnings::enabled("syntax") ;
172print "ok3\n" if !warnings::enabled("io") ;
1731;
174--FILE-- def.pm
175use warnings 'syntax' ;
176print "ok4\n" if !warnings::enabled('all') ;
177print "ok5\n" if !warnings::enabled("io") ;
178use abc10 ;
1791;
180--FILE--
181use warnings 'io' ;
182use def ;
183EXPECT
184ok1
185ok2
186ok3
187ok4
188ok5
189########
190
191--FILE-- abc11.pm
192package abc11 ;
193no warnings ;
194sub check {
195  print "ok1\n" if !warnings::enabled('all') ;
196  print "ok2\n" if warnings::enabled("syntax") ;
197}
1981;
199--FILE--
200use warnings 'syntax' ;
201use abc11 ;
202eval {
203  abc11::check() ;
204};
205print $@ ;
206EXPECT
207ok1
208ok2
209########
210
211--FILE-- abc12.pm
212package abc12 ;
213use warnings 'io' ;
214sub check {
215  print "ok1\n" if ! warnings::enabled('all') ;
216  print "ok2\n" if   warnings::enabled("syntax") ;
217  print "ok3\n" if ! warnings::enabled("io") ;
218}
2191;
220--FILE--
221use warnings 'syntax' ;
222use abc12 ;
223eval {
224  abc12::check() ;
225  } ;
226print $@ ;
227EXPECT
228ok1
229ok2
230ok3
231########
232
233--FILE-- abc13
234package abc13 ;
235no warnings ;
236sub check {
237  print "ok1\n" if !warnings::enabled('all') ;
238  print "ok2\n" if warnings::enabled("syntax") ;
239}
2401;
241--FILE--
242use warnings 'syntax' ;
243require "abc13" ;
244eval {
245  abc13::check() ;
246  } ;
247print $@ ;
248EXPECT
249ok1
250ok2
251########
252
253--FILE-- abc14
254package abc14 ;
255use warnings 'io' ;
256sub check {
257  print "ok1\n" if !warnings::enabled('all') ;
258  print "ok2\n" if warnings::enabled("syntax") ;
259  print "ok3\n" if warnings::enabled("io") ;
260}
2611;
262--FILE--
263use warnings 'syntax' ;
264require "abc14" ;
265eval {
266  use warnings 'io' ;
267  abc14::check() ;
268};
269abc14::check() ;
270print $@ ;
271EXPECT
272ok1
273ok2
274ok3
275ok1
276ok2
277########
278
279--FILE-- abc15.pm
280package abc15 ;
281use warnings 'io' ;
282sub check {
283  print "ok1\n" if ! warnings::enabled('all') ;
284  print "ok2\n" if  warnings::enabled("syntax") ;
285  print "ok3\n" if ! warnings::enabled("io") ;
286}
2871;
288--FILE--
289use warnings 'syntax' ;
290use abc15 ;
291sub fred { abc15::check() }
292fred() ;
293EXPECT
294ok1
295ok2
296ok3
297########
298
299--FILE-- abc16.pm
300package abc16 ;
301use warnings 'io' ;
302sub check {
303  print "ok1\n" if  ! warnings::enabled('all') ;
304}
3051;
306--FILE--
307use warnings 'syntax' ;
308use abc16 ;
309sub fred { no warnings ; abc16::check() }
310fred() ;
311EXPECT
312ok1
313########
314
315--FILE-- abc17.pm
316package abc17 ;
317use warnings 'misc' ;
318sub check {
319  print "ok1\n" if  ! warnings::enabled('all') ;
320  print "ok2\n" if  warnings::enabled("syntax") ;
321  print "ok3\n" if  warnings::enabled("io") ;
322  print "ok4\n" if  ! warnings::enabled("misc") ;
323}
3241;
325--FILE--
326use warnings 'syntax' ;
327use abc17 ;
328sub fred { use warnings 'io'  ; abc17::check() }
329fred() ;
330EXPECT
331ok1
332ok2
333ok3
334ok4
335########
336
337# check warnings::warn
338use warnings ;
339eval {
340    warnings::warn()
341  } ;
342print $@ ;
343eval {
344  warnings::warn("fred", "joe")
345  } ;
346print $@ ;
347EXPECT
348Usage: warnings::warn([category,] 'message') at - line 5.
349Unknown warnings category 'fred' at - line 9.
350########
351
352# check warnings::warnif
353use warnings ;
354eval {
355  warnings::warnif()
356} ;
357print $@ ;
358eval {
359  warnings::warnif("fred", "joe")
360} ;
361print $@ ;
362EXPECT
363Usage: warnings::warnif([category,] 'message') at - line 5.
364Unknown warnings category 'fred' at - line 9.
365########
366
367--FILE-- abc18.pm
368package abc18 ;
369use warnings 'misc' ;
370sub check { warnings::warn("io", "hello") }
3711;
372--FILE--
373use warnings "io" ;
374use abc18;
375abc18::check() ;
376EXPECT
377hello at - line 3.
378########
379
380--FILE-- abc19.pm
381package abc19 ;
382use warnings 'misc' ;
383sub check { warnings::warn("misc", "hello") }
3841;
385--FILE--
386use warnings "io" ;
387use abc19;
388abc19::check() ;
389EXPECT
390hello at - line 3.
391########
392
393--FILE-- abc20.pm
394package abc20 ;
395use warnings 'misc' ;
396sub check { warnings::warn("io", "hello") }
3971;
398--FILE--
399use warnings qw( FATAL deprecated ) ;
400use abc20;
401eval {
402    abc20::check() ;
403  } ;
404print "[[$@]]\n";
405EXPECT
406hello at - line 4.
407[[]]
408########
409
410--FILE-- abc21.pm
411package abc21 ;
412use warnings 'misc' ;
413sub check { warnings::warn("io", "hello") }
4141;
415--FILE--
416use warnings qw( FATAL io ) ;
417use abc21;
418eval {
419  abc21::check() ;
420} ;
421print "[[$@]]\n";
422EXPECT
423[[hello at - line 4.
424]]
425########
426-W
427--FILE-- abc22.pm
428package abc22 ;
429use warnings "io" ;
430print "ok1\n" if warnings::enabled("io") ;
431print "ok2\n" if warnings::enabled("all") ;
4321;
433--FILE--
434no warnings;
435use abc22 ;
436EXPECT
437ok1
438ok2
439########
440-X
441--FILE-- abc23.pm
442package abc23 ;
443use warnings "io" ;
444print "ok1\n" if !warnings::enabled("io") ;
445print "ok2\n" if !warnings::enabled("all") ;
4461;
447--FILE--
448use warnings;
449use abc23 ;
450EXPECT
451ok1
452ok2
453########
454
455--FILE-- abc24.pm
456package abc24 ;
457no warnings ;
458sub check {
459  print "ok\n" if ! warnings::enabled() ;
460}
4611;
462--FILE--
463use warnings 'syntax' ;
464use abc24 ;
465abc24::check() ;
466EXPECT
467package 'abc24' not registered for warnings at abc24.pm line 4.
468########
469
470--FILE-- abc25.pm
471package abc25 ;
472no warnings ;
473sub check {
474  warnings::warn("fred") ;
475}
4761;
477--FILE--
478use warnings 'syntax' ;
479use abc25 ;
480abc25::check() ;
481EXPECT
482package 'abc25' not registered for warnings at abc25.pm line 4.
483########
484
485--FILE-- abc26.pm
486package abc26 ;
487no warnings ;
488sub check {
489  warnings::warnif("fred") ;
490}
4911;
492--FILE--
493use warnings 'syntax' ;
494use abc26 ;
495abc26::check() ;
496EXPECT
497package 'abc26' not registered for warnings at abc26.pm line 4.
498########
499
500--FILE-- abc27.pm
501package abc27 ;
502use warnings 'io' ;
503use warnings::register ;
504sub check {
505  print "ok1\n" if  warnings::enabled ;
506  print "ok2\n" if  warnings::enabled("syntax") ;
507  print "ok3\n" if !warnings::enabled("io") ;
508}
5091;
510--FILE--
511use warnings 'syntax' ;
512use abc27 ;
513use warnings 'abc27' ;
514abc27::check() ;
515EXPECT
516ok1
517ok2
518ok3
519########
520
521--FILE-- abc28.pm
522package abc28 ;
523use warnings 'io' ;
524use warnings::register ;
525sub check {
526  print "ok1\n" if !warnings::enabled ;
527  print "ok2\n" if  warnings::enabled("syntax") ;
528  print "ok3\n" if !warnings::enabled("io") ;
529}
5301;
531--FILE--
532use warnings 'syntax' ;
533use abc28 ;
534abc28::check() ;
535EXPECT
536ok1
537ok2
538ok3
539########
540
541--FILE-- abc29.pm
542package abc29 ;
543no warnings ;
544use warnings::register ;
545sub check {
546  print "ok1\n" if warnings::enabled ;
547  print "ok2\n" if warnings::enabled("syntax") ;
548}
5491;
550--FILE--
551use warnings 'syntax' ;
552use abc29 ;
553use warnings 'abc29' ;
554eval { abc29::check() ; };
555print $@ ;
556EXPECT
557ok1
558ok2
559########
560
561--FILE-- abc30.pm
562package abc30 ;
563use warnings 'io' ;
564use warnings::register ;
565sub check {
566  print "ok1\n" if !warnings::enabled ;
567  print "ok2\n" if  warnings::enabled("syntax") ;
568  print "ok3\n" if !warnings::enabled("io") ;
569}
5701;
571--FILE--
572use warnings 'syntax' ;
573use abc30 ;
574eval { abc30::check() ; } ;
575print $@ ;
576EXPECT
577ok1
578ok2
579ok3
580########
581
582--FILE-- abc31.pm
583package abc31 ;
584use warnings 'io' ;
585use warnings::register ;
586sub check {
587  print "ok1\n" if  warnings::enabled ;
588  print "ok2\n" if  warnings::enabled("syntax") ;
589  print "ok3\n" if !warnings::enabled("io") ;
590}
5911;
592--FILE--
593use warnings 'syntax' ;
594use abc31 ;
595use warnings 'abc31' ;
596sub fred { abc31::check() }
597fred() ;
598EXPECT
599ok1
600ok2
601ok3
602########
603
604--FILE-- abc32.pm
605package abc32 ;
606use warnings 'io' ;
607use warnings::register ;
608sub check {
609  print "ok1\n" if  ! warnings::enabled ;
610}
6111;
612--FILE--
613use warnings 'syntax' ;
614use abc32 ;
615sub fred { no warnings ; abc32::check() }
616fred() ;
617EXPECT
618ok1
619########
620
621--FILE-- abc33.pm
622package abc33 ;
623use warnings 'misc' ;
624use warnings::register;
625sub check {
626  print "ok1\n" if  warnings::enabled ;
627  print "ok2\n" if  warnings::enabled("syntax") ;
628  print "ok3\n" if  warnings::enabled("io") ;
629  print "ok4\n" if  ! warnings::enabled("misc") ;
630}
6311;
632--FILE--
633use warnings 'syntax' ;
634use abc33 ;
635use warnings 'abc33' ;
636sub fred { use warnings 'io'  ; abc33::check() }
637fred() ;
638EXPECT
639ok1
640ok2
641ok3
642ok4
643########
644
645--FILE-- abc34.pm
646package abc34 ;
647use warnings 'misc' ;
648use warnings::register;
649sub check { warnings::warn("hello") }
6501;
651--FILE--
652use abc34;
653use warnings "abc34" ;
654abc34::check() ;
655EXPECT
656hello at - line 3.
657########
658
659--FILE-- abc35.pm
660package abc35 ;
661use warnings::register;
662sub check { warnings::warn("hello") }
6631;
664--FILE--
665use abc35;
666abc35::check() ;
667EXPECT
668hello at - line 2.
669########
670
671--FILE-- abc36.pm
672package abc36 ;
673use warnings::register ;
674sub check { warnings::warn("hello") }
6751;
676--FILE--
677use abc36;
678use warnings qw( FATAL deprecated ) ;
679eval {
680    abc36::check() ;
681  } ;
682print "[[$@]]\n";
683EXPECT
684hello at - line 4.
685[[]]
686########
687
688--FILE-- abc37.pm
689package abc37 ;
690use warnings::register ;
691sub check { warnings::warn("hello") }
6921;
693--FILE--
694use abc37;
695use warnings qw( FATAL abc37 ) ;
696eval {
697  abc37::check() ;
698  } ;
699print "[[$@]]\n";
700EXPECT
701[[hello at - line 4.
702]]
703########
704-W
705--FILE-- abc38.pm
706package abc38 ;
707use warnings "io" ;
708use warnings::register ;
709sub check {
710  print "ok1\n" if warnings::enabled() ;
711  print "ok2\n" if warnings::enabled("io") ;
712  print "ok3\n" if warnings::enabled("all") ;
713}
7141;
715--FILE--
716no warnings;
717use abc38 ;
718abc38::check() ;
719EXPECT
720ok1
721ok2
722ok3
723########
724-X
725--FILE-- abc39.pm
726package abc39 ;
727use warnings "io" ;
728use warnings::register ;
729sub check {
730  print "ok1\n" if !warnings::enabled() ;
731  print "ok2\n" if !warnings::enabled("io") ;
732  print "ok3\n" if !warnings::enabled("all") ;
733}
7341;
735--FILE--
736no warnings;
737use abc39 ;
738abc39::check() ;
739EXPECT
740ok1
741ok2
742ok3
743########
744
745--FILE-- abc40.pm
746package abc40 ;
747use warnings "io" ;
748use warnings::register ;
749sub check {
750  print "ok1\n" if warnings::enabled() ;
751  print "ok2\n" if warnings::enabled("io") ;
752  print "ok3\n" if warnings::enabled("all") ;
753}
7541;
755--FILE--
756use warnings 'all';
757use abc40 ;
758abc40::check() ;
759EXPECT
760ok1
761ok2
762ok3
763########
764
765--FILE-- abc41.pm
766package abc41 ;
767use warnings "io" ;
768use warnings::register ;
769sub check {
770  print "ok1\n" if !warnings::enabled() ;
771  print "ok2\n" if !warnings::enabled("io") ;
772  print "ok3\n" if !warnings::enabled("all") ;
773}
7741;
775--FILE--
776use abc41 ;
777no warnings ;
778abc41::check() ;
779EXPECT
780ok1
781ok2
782ok3
783########
784
785--FILE-- abc42.pm
786package abc42 ;
787use warnings "io" ;
788use warnings::register ;
789sub check {
790  print "ok1\n" if !warnings::enabled() ;
791  print "ok2\n" if !warnings::enabled("io") ;
792  print "ok3\n" if !warnings::enabled("all") ;
793  warnings::warnif("my message 1") ;
794  warnings::warnif('abc42', "my message 2") ;
795  warnings::warnif('io', "my message 3") ;
796  warnings::warnif('all', "my message 4") ;
797}
7981;
799--FILE--
800use abc42 ;
801use warnings 'abc42';
802no warnings ;
803abc42::check() ;
804EXPECT
805ok1
806ok2
807ok3
808########
809
810--FILE-- abc43.pm
811package abc43 ;
812use warnings "io" ;
813use warnings::register ;
814sub check {
815  print "abc43 self" . (warnings::enabled() ? "" : " not") . " enabled\n" ;
816  print "abc43 def"  . (warnings::enabled('def') ? "" : " not") . " enabled\n" ;
817  print "abc43 all"  . (warnings::enabled('all') ? "" : " not") . " enabled\n" ;
818}
8191;
820--FILE-- def.pm
821package def ;
822use warnings "io" ;
823use warnings::register ;
824sub check {
825  print "def self" . (warnings::enabled() ? "" : " not") . " enabled\n" ;
826  print "def abc43"  . (warnings::enabled('abc43') ? "" : " not") . " enabled\n" ;
827  print "def all"  . (warnings::enabled('all') ? "" : " not") . " enabled\n" ;
828}
8291;
830--FILE--
831use abc43 ;
832use def ;
833use warnings 'abc43';
834abc43::check() ;
835def::check() ;
836no warnings 'abc43'  ;
837use warnings 'def'  ;
838abc43::check() ;
839def::check() ;
840use warnings 'abc43'  ;
841use warnings 'def'  ;
842abc43::check() ;
843def::check() ;
844no warnings 'abc43'  ;
845no warnings 'def'  ;
846abc43::check() ;
847def::check() ;
848use warnings;
849abc43::check() ;
850def::check() ;
851no warnings 'abc43' ;
852abc43::check() ;
853def::check() ;
854EXPECT
855abc43 self enabled
856abc43 def not enabled
857abc43 all not enabled
858def self not enabled
859def abc43 enabled
860def all not enabled
861abc43 self not enabled
862abc43 def enabled
863abc43 all not enabled
864def self enabled
865def abc43 not enabled
866def all not enabled
867abc43 self enabled
868abc43 def enabled
869abc43 all not enabled
870def self enabled
871def abc43 enabled
872def all not enabled
873abc43 self not enabled
874abc43 def not enabled
875abc43 all not enabled
876def self not enabled
877def abc43 not enabled
878def all not enabled
879abc43 self enabled
880abc43 def enabled
881abc43 all enabled
882def self enabled
883def abc43 enabled
884def all enabled
885abc43 self not enabled
886abc43 def enabled
887abc43 all enabled
888def self enabled
889def abc43 not enabled
890def all enabled
891########
892-w
893--FILE-- abc44.pm
894package abc44 ;
895no warnings ;
896use warnings::register ;
897sub check {
898  print "ok1\n" if warnings::enabled() ;
899  print "ok2\n" if warnings::enabled("io") ;
900  print "ok3\n" if warnings::enabled("all") ;
901}
9021;
903--FILE--
904use abc44 ;
905abc44::check() ;
906EXPECT
907ok1
908ok2
909ok3
910########
911-w
912--FILE-- abc45.pm
913package abc45 ;
914no warnings ;
915use warnings::register ;
916sub check {
917  print "ok1\n" if !warnings::enabled() ;
918  print "ok2\n" if !warnings::enabled("io") ;
919  print "ok3\n" if !warnings::enabled("all") ;
920}
9211;
922--FILE--
923use abc45 ;
924use warnings 'abc45';
925no warnings ;
926abc45::check() ;
927EXPECT
928ok1
929ok2
930ok3
931########
932
933--FILE-- abc46.pm
934package abc46 ;
935no warnings ;
936use warnings::register ;
937sub check {
938  print "ok1\n" if !warnings::enabled() ;
939  print "ok2\n" if !warnings::enabled("io") ;
940  print "ok3\n" if !warnings::enabled("all") ;
941  warnings::warnif("my message 1") ;
942  warnings::warnif('abc46', "my message 2") ;
943  warnings::warnif('io', "my message 3") ;
944  warnings::warnif('all', "my message 4") ;
945}
9461;
947--FILE--
948use abc46 ;
949use warnings 'abc46';
950no warnings ;
951BEGIN { $^W = 1 ; }
952abc46::check() ;
953EXPECT
954ok1
955ok2
956ok3
957########
958
959--FILE-- abc47.pm
960package abc47 ;
961no warnings ;
962use warnings::register ;
963sub check {
964  print "ok1\n" if !warnings::enabled() ;
965  print "ok2\n" if !warnings::enabled("io") ;
966  print "ok3\n" if !warnings::enabled("all") ;
967}
9681;
969--FILE--
970use abc47 ;
971use warnings 'abc47';
972no warnings ;
973$^W = 1 ;
974abc47::check() ;
975EXPECT
976ok1
977ok2
978ok3
979########
980
981--FILE-- abc48.pm
982$| = 1;
983package abc48 ;
984no warnings ;
985use warnings::register ;
986sub check {
987  print "ok1\n" if  warnings::enabled() ;
988  print "ok2\n" if !warnings::enabled("io") ;
989  print "ok3\n" if !warnings::enabled("all") ;
990  print "ok4\n" if  warnings::enabled("abc48") ;
991  warnings::warn("my message 1") ;
992  warnings::warnif("my message 2") ;
993  warnings::warnif('abc48', "my message 3") ;
994  warnings::warnif('io', "my message 4") ;
995  warnings::warnif('all', "my message 5") ;
996}
997sub in2 { no warnings ; check() }
998sub in1 { no warnings ; in2() }
9991;
1000--FILE--
1001use abc48 ;
1002use warnings 'abc48';
1003abc48::in1() ;
1004EXPECT
1005ok1
1006ok2
1007ok3
1008ok4
1009my message 1 at - line 3.
1010my message 2 at - line 3.
1011my message 3 at - line 3.
1012########
1013
1014--FILE-- def.pm
1015package def ;
1016no warnings ;
1017use warnings::register ;
1018sub check {
1019  print "ok1\n" if  warnings::enabled() ;
1020  print "ok2\n" if !warnings::enabled("io") ;
1021  print "ok3\n" if !warnings::enabled("all") ;
1022  print "ok4\n" if  warnings::enabled("def") ;
1023  warnings::warn("my message 1") ;
1024  warnings::warnif("my message 2") ;
1025  warnings::warnif('def', "my message 3") ;
1026  warnings::warnif('io', "my message 4") ;
1027  warnings::warnif('all', "my message 5") ;
1028}
1029sub in2 { no warnings ; check() }
1030sub in1 { no warnings ; in2() }
10311;
1032--FILE-- abc49.pm
1033$| = 1;
1034package abc49 ;
1035use def ;
1036use warnings 'def';
1037sub in1 { def::in1() ; }
10381;
1039--FILE--
1040use abc49 ;
1041no warnings;
1042abc49::in1() ;
1043EXPECT
1044ok1
1045ok2
1046ok3
1047ok4
1048my message 1 at abc49.pm line 5.
1049my message 2 at abc49.pm line 5.
1050my message 3 at abc49.pm line 5.
1051########
1052
1053--FILE-- def.pm
1054$| = 1;
1055package def ;
1056no warnings ;
1057use warnings::register ;
1058require Exporter;
1059@ISA = qw( Exporter ) ;
1060@EXPORT = qw( in1 ) ;
1061sub check {
1062  print "ok1\n" if  warnings::enabled() ;
1063  print "ok2\n" if !warnings::enabled("io") ;
1064  print "ok3\n" if !warnings::enabled("all") ;
1065  print "ok4\n" if  warnings::enabled("abc50") ;
1066  print "ok5\n" if !warnings::enabled("def") ;
1067  warnings::warn("my message 1") ;
1068  warnings::warnif("my message 2") ;
1069  warnings::warnif('abc50', "my message 3") ;
1070  warnings::warnif('def', "my message 4") ;
1071  warnings::warnif('io', "my message 5") ;
1072  warnings::warnif('all', "my message 6") ;
1073}
1074sub in2 { no warnings ; check() }
1075sub in1 { no warnings ; in2() }
10761;
1077--FILE-- abc50.pm
1078package abc50 ;
1079use warnings::register ;
1080use def ;
1081#@ISA = qw(def) ;
10821;
1083--FILE--
1084use abc50 ;
1085no warnings;
1086use warnings 'abc50';
1087abc50::in1() ;
1088EXPECT
1089ok2
1090ok3
1091ok4
1092ok5
1093my message 1 at - line 4.
1094my message 3 at - line 4.
1095########
1096
1097--FILE-- def.pm
1098package def ;
1099no warnings ;
1100use warnings::register ;
1101
1102sub new
1103{
1104    my $class = shift ;
1105    bless [], $class ;
1106}
1107
1108sub check
1109{
1110  my $self = shift ;
1111  print "ok1\n" if !warnings::enabled() ;
1112  print "ok2\n" if !warnings::enabled("io") ;
1113  print "ok3\n" if !warnings::enabled("all") ;
1114  print "ok4\n" if  warnings::enabled("abc51") ;
1115  print "ok5\n" if !warnings::enabled("def") ;
1116  print "ok6\n" if  warnings::enabled($self) ;
1117
1118  warnings::warn("my message 1") ;
1119  warnings::warn($self, "my message 2") ;
1120
1121  warnings::warnif("my message 3") ;
1122  warnings::warnif('abc51', "my message 4") ;
1123  warnings::warnif('def', "my message 5") ;
1124  warnings::warnif('io', "my message 6") ;
1125  warnings::warnif('all', "my message 7") ;
1126  warnings::warnif($self, "my message 8") ;
1127}
1128sub in2
1129{
1130  no warnings ;
1131  my $self = shift ;
1132  $self->check() ;
1133}
1134sub in1
1135{
1136  no warnings ;
1137  my $self = shift ;
1138  $self->in2();
1139}
11401;
1141--FILE-- abc51.pm
1142$| = 1;
1143package abc51 ;
1144use warnings::register ;
1145use def ;
1146@ISA = qw(def) ;
1147sub new
1148{
1149    my $class = shift ;
1150    bless [], $class ;
1151}
1152
11531;
1154--FILE--
1155use abc51 ;
1156no warnings;
1157use warnings 'abc51';
1158$a = new abc51 ;
1159$a->in1() ;
1160print "**\n";
1161$b = new def ;
1162$b->in1() ;
1163EXPECT
1164ok1
1165ok2
1166ok3
1167ok4
1168ok5
1169ok6
1170my message 1 at - line 5.
1171my message 2 at - line 5.
1172my message 4 at - line 5.
1173my message 8 at - line 5.
1174**
1175ok1
1176ok2
1177ok3
1178ok4
1179ok5
1180my message 1 at - line 8.
1181my message 2 at - line 8.
1182my message 4 at - line 8.
1183########
1184
1185--FILE-- abc52.pm
1186package abc52 ;
1187use warnings::register ('foo', 'bar');
1188sub check {
1189    warnings::warnif('abc52', "hello");
1190    warnings::warnif('abc52::foo', "hello foo");
1191    warnings::warnif('abc52::bar', "hello bar");
1192}
11931;
1194--FILE--
1195use abc52;
1196use warnings("abc52", "abc52::bar");
1197abc52::check() ;
1198EXPECT
1199hello at - line 3.
1200hello bar at - line 3.
1201########
1202
1203--FILE--
1204# test for bug [perl #15395]
1205my ( $warn_cat, # warning category we'll try to control
1206     $warn_msg, # the error message to catch
1207);
1208
1209package SomeModule;
1210use warnings::register;
1211
1212BEGIN {
1213    $warn_cat = __PACKAGE__;
1214    $warn_msg = 'from ' . __PACKAGE__;
1215}
1216
1217# a sub that generates a random warning
1218sub gen_warning {
1219    warnings::warnif( $warn_msg );
1220}
1221
1222package ClientModule;
1223# use SomeModule; (would go here)
1224our @CARP_NOT = ( $warn_cat ); # deliver warnings to *our* client
1225
1226# call_warner provokes a warning.  It is delivered to its caller,
1227# who should also be able to control it
1228sub call_warner {
1229    SomeModule::gen_warning();
1230}
1231
1232# user
1233
1234package main;
1235my $warn_line = __LINE__ + 3; # this line should be in the error message
1236eval {
1237    use warnings FATAL => $warn_cat; # we want to know if this works
1238    ClientModule::call_warner();
1239};
1240
1241# have we caught an error, and is it the one we generated?
1242print "ok1\n" if $@ =~ /$warn_msg/;
1243
1244# does it indicate the right line?
1245print "ok2\n" if $@ =~ /line $warn_line/;
1246EXPECT
1247ok1
1248ok2
1249########
1250
1251--FILE-- fatal1.pm
1252package fatal1 ;
1253no warnings ;
1254print "ok1\n" if !warnings::fatal_enabled('all') ;
1255print "ok2\n" if !warnings::fatal_enabled("syntax") ;
12561;
1257--FILE--
1258use fatal1 ;
1259EXPECT
1260ok1
1261ok2
1262########
1263
1264--FILE-- fatal2.pm
1265package  fatal2;
1266no warnings ;
1267print "ok1\n" if !warnings::fatal_enabled('all') ;
1268print "ok2\n" if warnings::fatal_enabled("syntax") ;
12691;
1270--FILE--
1271use warnings FATAL => 'syntax' ;
1272use fatal2 ;
1273EXPECT
1274ok1
1275ok2
1276########
1277
1278--FILE-- fatal3.pm
1279package fatal3 ;
1280no warnings ;
1281print "ok1\n" if warnings::fatal_enabled('all') ;
1282print "ok2\n" if warnings::fatal_enabled("syntax") ;
12831;
1284--FILE--
1285use warnings FATAL => 'all' ;
1286use fatal3 ;
1287EXPECT
1288ok1
1289ok2
1290########
1291
1292--FILE-- fatal4.pm
1293package fatal4 ;
1294no warnings ;
1295print "ok1\n" if warnings::fatal_enabled('all') ;
1296print "ok2\n" if warnings::fatal_enabled("void") ;
1297print "ok3\n" if !warnings::fatal_enabled("syntax") ;
12981;
1299--FILE--
1300use warnings FATAL => 'all', NONFATAL => 'syntax' ;
1301use fatal4 ;
1302EXPECT
1303ok1
1304ok2
1305ok3
1306########
1307{ Quux::quux(); }
1308{ no warnings; Quux::quux(); }
1309{ no warnings; use warnings "void"; Quux::quux(); }
1310{ use warnings; Quux::quux(); }
1311{ use warnings; no warnings "void"; Quux::quux(); }
1312use warnings ();
1313BEGIN { warnings::register_categories(qw(wibble wobble wabble wubble webble)); }
1314package Quux {
1315  sub quux {
1316    warnings::warnif($_, "My $_ is flanged")
1317      foreach qw(wibble wobble wabble wubble webble);
1318    ();
1319  }
1320}
1321{ Quux::quux(); }
1322{ no warnings; Quux::quux(); }
1323{ no warnings; use warnings "void"; Quux::quux(); }
1324{ use warnings; Quux::quux(); }
1325{ use warnings; no warnings "void"; Quux::quux(); }
1326{ no warnings; use warnings qw(wibble wabble webble); Quux::quux(); }
1327{ no warnings; use warnings qw(wobble wubble); Quux::quux(); }
1328{ use warnings; no warnings qw(wibble wabble webble); Quux::quux(); }
1329{ use warnings; no warnings qw(wobble wubble); Quux::quux(); }
1330{ use warnings qw(wubble NONFATAL void); Quux::quux(); }
1331{ use warnings qw(wubble); no warnings "void"; Quux::quux(); }
1332{ no warnings "webble"; Quux::quux(); }
1333{ use warnings qw(NONFATAL webble); Quux::quux(); }
1334print "done\n";
1335EXPECT
1336My wibble is flanged at - line 4.
1337My wobble is flanged at - line 4.
1338My wabble is flanged at - line 4.
1339My wubble is flanged at - line 4.
1340My webble is flanged at - line 4.
1341My wibble is flanged at - line 5.
1342My wobble is flanged at - line 5.
1343My wabble is flanged at - line 5.
1344My wubble is flanged at - line 5.
1345My webble is flanged at - line 5.
1346My wibble is flanged at - line 18.
1347My wobble is flanged at - line 18.
1348My wabble is flanged at - line 18.
1349My wubble is flanged at - line 18.
1350My webble is flanged at - line 18.
1351My wibble is flanged at - line 19.
1352My wobble is flanged at - line 19.
1353My wabble is flanged at - line 19.
1354My wubble is flanged at - line 19.
1355My webble is flanged at - line 19.
1356My wibble is flanged at - line 20.
1357My wabble is flanged at - line 20.
1358My webble is flanged at - line 20.
1359My wobble is flanged at - line 21.
1360My wubble is flanged at - line 21.
1361My wobble is flanged at - line 22.
1362My wubble is flanged at - line 22.
1363My wibble is flanged at - line 23.
1364My wabble is flanged at - line 23.
1365My webble is flanged at - line 23.
1366My wubble is flanged at - line 24.
1367My wubble is flanged at - line 25.
1368My webble is flanged at - line 27.
1369done
1370########
1371# NAME _at_level
1372select STDERR;
1373{ use warnings "utf8"; foo() }
1374sub foo { use warnings "syntax"; bar() }
1375sub bar {
1376 use warnings "unpack";
1377 local $\="\n";
1378 print "1. ", warnings::enabled_at_level("unpack", 0)||0;
1379 print "2. ", warnings::enabled_at_level("unpack", 1)||0;
1380 print "3. ", warnings::enabled_at_level("unpack", 2)||0;
1381 print "4. ", warnings::enabled_at_level("syntax", 0)||0;
1382 print "5. ", warnings::enabled_at_level("syntax", 1)||0;
1383 print "6. ", warnings::enabled_at_level("syntax", 2)||0;
1384 print "7. ", warnings::enabled_at_level("utf8", 0)||0;
1385 print "8. ", warnings::enabled_at_level("utf8", 1)||0;
1386 print "9. ", warnings::enabled_at_level("utf8", 2)||0;
1387 warnings::warn_at_level  ("misc",0,"A mandatory foo warning");
1388 warnings::warn_at_level  ("misc",1,"A mandatory top-level warning");
1389 warnings::warnif_at_level("syntax",0,"A conditional syntax warning");
1390 warnings::warnif_at_level("syntax",1,"A conditional syntax warning");
1391 warnings::warnif_at_level("utf8",0,"A conditional utf8 warning");
1392 warnings::warnif_at_level("utf8",1,"A conditional utf8 warning");
1393}
1394{ use warnings "syntax"; use warnings FATAL => "utf8"; foo2() }
1395sub foo2 {
1396  use warnings FATAL => "syntax"; use warnings "utf8"; bar2()
1397}
1398sub bar2 {
1399 $\="\n";
1400 print "10. ", warnings::fatal_enabled_at_level("syntax", 0)||0;
1401 print "11. ", warnings::fatal_enabled_at_level("syntax", 1)||0;
1402 print "12. ", warnings::fatal_enabled_at_level("utf8", 0)||0;
1403 print "13. ", warnings::fatal_enabled_at_level("utf8", 1)||0;
1404 undef $\;
1405 eval { warnings::warn_at_level  ("syntax",1,"A fatal warning") };
1406 print "Died: $@" if $@;
1407 eval { warnings::warnif_at_level("syntax",1,"A fatal syntax warning") };
1408 print "Died: $@" if $@;
1409 eval { warnings::warnif_at_level("syntax",2,"A syntax warning") };
1410 print "Died: $@" if $@;
1411 eval { warnings::warnif_at_level("utf8",1,"A utf8 warning") };
1412 print "Died: $@" if $@;
1413 eval { warnings::warnif_at_level("utf8",2,"A fatal utf8 warning") };
1414 print "Died: $@" if $@;
1415}
1416EXPECT
14171. 0
14182. 0
14193. 0
14204. 1
14215. 0
14226. 0
14237. 0
14248. 1
14259. 0
1426A mandatory foo warning at - line 3.
1427A mandatory top-level warning at - line 2.
1428A conditional syntax warning at - line 3.
1429A conditional utf8 warning at - line 2.
143010. 1
143111. 0
143212. 0
143313. 1
1434Died: A fatal warning at - line 25.
1435Died: A fatal syntax warning at - line 25.
1436A syntax warning at - line 23.
1437A utf8 warning at - line 25.
1438Died: A fatal utf8 warning at - line 23.
1439########
1440# NAME _at_level with filehandle
1441use warnings;
1442# Create temp file for testing handles.
1443open oUt, ">tmp" or die $!;
1444print oUt "foo\nbar\n";
1445close oUt;
1446sub bimp {
1447 open FH, "tmp";
1448 <FH>; <FH>;
1449 warnings::warn_at_level("syntax", 0, "Foo warning");
1450 close FH;
1451 warnings::warn_at_level("syntax", 0, "Bar warning");
1452};
1453bimp;
1454EXPECT
1455Foo warning at - line 13, <FH> line 2.
1456Bar warning at - line 13.
1457########
1458# NAME _at_level with chunky filehandle
1459use warnings;
1460# Create temp file for testing handles.
1461open oUt, ">tmp" or die $!;
1462print oUt "foo7bar7";
1463close oUt;
1464sub bimp {
1465 open FH, "tmp";
1466 $/ = 7;
1467 <FH>; <FH>;
1468 warnings::warn_at_level("syntax", 0, "Foo warning");
1469 close FH;
1470 warnings::warn_at_level("syntax", 0, "Bar warning");
1471};
1472bimp;
1473EXPECT
1474Foo warning at - line 14, <FH> chunk 2.
1475Bar warning at - line 14.
1476