Check FATAL functionality

__END__

# Check compile time warning
use warnings FATAL => 'syntax' ;
{
    no warnings ;
    $a =+ 1 ;
}
$a =+ 1 ;
print STDERR "The End.\n" ;
EXPECT
Reversed += operator at - line 8 character 4.
########

# Check compile time warning
use warnings FATAL => 'all' ;
{
    no warnings ;
    my $a =+ 1 ;
}
my $a =+ 1 ;
print STDERR "The End.\n" ;
EXPECT
Reversed += operator at - line 8 character 7.
########

# Check runtime scope of pragma
use warnings FATAL => 'uninitialized' ;
{
    no warnings ;
    my $b ; chop $b ;
}
my $b ; chop $b ;
print STDERR "The End.\n" ;
EXPECT
Use of uninitialized value $b in scalar chop at - line 8 character 9.
########

# Check runtime scope of pragma
use warnings FATAL => 'all' ;
{
    no warnings ;
    my $b ; chop $b ;
}
my $b ; chop $b ;
print STDERR "The End.\n" ;
EXPECT
Use of uninitialized value $b in scalar chop at - line 8 character 9.
########

# Check runtime scope of pragma
no warnings ;
{
    use warnings FATAL => 'uninitialized' ;
    $a = sub { my $b ; chop $b ; }
}
&$a ;
print STDERR "The End.\n" ;
EXPECT
Use of uninitialized value $b in scalar chop at - line 6 character 24.
    main::__ANON__ called at - line 8 character 1.
########

# Check runtime scope of pragma
no warnings ;
{
    use warnings FATAL => 'all' ;
    $a = sub { my $b ; chop $b ; }
}
&$a ;
print STDERR "The End.\n" ;
EXPECT
Use of uninitialized value $b in scalar chop at - line 6 character 24.
    main::__ANON__ called at - line 8 character 1.
########

--FILE-- abc
$a =+ 1 ;
1;
--FILE-- 
use warnings FATAL => 'syntax' ;
require "./abc";
EXPECT

########

--FILE-- abc
use warnings FATAL => 'syntax' ;
1;
--FILE-- 
require "./abc";
$a =+ 1 ;
EXPECT

########

--FILE-- abc
use warnings 'syntax' ;
$a =+ 1 ;
1;
--FILE-- 
use warnings FATAL => 'uninitialized' ;
require "./abc";
my $a ; chop $a ;
print STDERR "The End.\n" ;
EXPECT
Reversed += operator at ./abc line 2 character 4.
    (require) called at - line 2 character 1.
Use of uninitialized value $a in scalar chop at - line 3 character 9.
########

--FILE-- abc.pm
use warnings 'syntax' ;
$a =+ 1 ;
1;
--FILE-- 
use warnings FATAL => 'uninitialized' ;
use abc;
my $a ; chop $a ;
print STDERR "The End.\n" ;
EXPECT
Reversed += operator at abc.pm line 2 character 4.
    (eval) called at - line 2 character 1.
Use of uninitialized value $a in scalar chop at - line 3 character 9.
########

# Check scope of pragma with eval
no warnings ;
try {
    use warnings FATAL => 'uninitialized' ;
    my $b ; chop $b ;
}; print STDERR "-- {$@->message}" ;
my $b ; chop $b ;
print STDERR "The End.\n" ;
EXPECT
-- Use of uninitialized value $b in scalar chop at - line 6 character 13.
    (eval) called at - line 4 character 1.
The End.
########

# Check scope of pragma with eval
use warnings FATAL => 'uninitialized' ;
try {
    my $b ; chop $b ;
}; print STDERR "-- {$@->message}" ;
my $b ; chop $b ;
print STDERR "The End.\n" ;
EXPECT
-- Use of uninitialized value $b in scalar chop at - line 5 character 13.
    (eval) called at - line 4 character 1.
Use of uninitialized value $b in scalar chop at - line 7 character 9.
########

# Check scope of pragma with eval
use warnings FATAL => 'uninitialized' ;
try {
    no warnings ;
    my $b ; chop $b ;
}; print STDERR $@;
my $b ; chop $b ;
print STDERR "The End.\n" ;
EXPECT
Use of uninitialized value $b in scalar chop at - line 8 character 9.
########

# Check scope of pragma with eval
no warnings ;
try {
    use warnings FATAL => 'syntax' ;
    $a =+ 1 ;
}; print STDERR "-- {$@->message}" ;
$a =+ 1 ;
print STDERR "The End.\n" ;
EXPECT
Reversed += operator at - line 6 character 8.
########

# Check scope of pragma with eval
use warnings FATAL => 'syntax' ;
try {
    $a =+ 1 ;
}; print STDERR "-- {$@->message}" ;
$a =+ 1 ;
print STDERR "The End.\n" ;
EXPECT
Reversed += operator at - line 5 character 8.
########

# Check scope of pragma with eval
use warnings FATAL => 'syntax' ;
try {
    no warnings ;
    $a =+ 1 ;
}; print STDERR $@;
$a =+ 1 ;
print STDERR "The End.\n" ;
EXPECT
Reversed += operator at - line 8 character 4.
########

# Check scope of pragma with eval
no warnings ;
try {
    use warnings FATAL => 'syntax' ;
}; print STDERR $@;
$a =+ 1 ;
print STDERR "The End.\n" ;
EXPECT
The End.
########

# Check scope of pragma with eval
no warnings ;
eval q[ 
    use warnings FATAL => 'uninitialized' ;
    my $b ; chop $b ;
]; print STDERR "-- {$@->message}";
my $b ; chop $b ;
print STDERR "The End.\n" ;
EXPECT
-- Use of uninitialized value $b in scalar chop at (eval 1) line 3 character 59.
    (eval) called at - line 4 character 1.
The End.
########

# Check scope of pragma with eval
use warnings FATAL => 'uninitialized' ;
eval '
    my $b ; chop $b ;
'; print STDERR "-- {$@->message}" ;
my $b ; chop $b ;
print STDERR "The End.\n" ;
EXPECT
-- Use of uninitialized value $b in scalar chop at (eval 1) line 2 character 14.
    (eval) called at - line 4 character 1.
Use of uninitialized value $b in scalar chop at - line 7 character 9.
########

# Check scope of pragma with eval
use warnings FATAL => 'uninitialized' ;
eval '
    no warnings ;
    my $b ; chop $b ;
'; print STDERR $@;
my $b ; chop $b ;
print STDERR "The End.\n" ;
EXPECT
Use of uninitialized value $b in scalar chop at - line 8 character 9.
########

# Check scope of pragma with eval
no warnings ;
eval q[ 
    use warnings FATAL => 'syntax' ;
    $a =+ 1 ;
]; print STDERR "-- {$@->message}";
$a =+ 1 ;
print STDERR "The End.\n" ;
EXPECT
-- Reversed += operator at (eval 1) line 3 character 47.
    (eval) called at - line 4 character 1.
The End.
########

# Check scope of pragma with eval
use warnings FATAL => 'syntax' ;
eval '
    $a =+ 1 ;
'; print STDERR "-- {$@->message}";
print STDERR "The End.\n" ;
EXPECT
-- Reversed += operator at (eval 1) line 2 character 9.
    (eval) called at - line 4 character 1.
The End.
########

# Check scope of pragma with eval
use warnings FATAL => 'syntax' ;
eval '
    no warnings ;
    $a =+ 1 ;
'; print STDERR "-- {$@->message}";
$a =+ 1 ;
print STDERR "The End.\n" ;
EXPECT
Reversed += operator at - line 8 character 4.
########
# TODO ? !%Config{usethreads} && $::UTF8 && (%ENV{PERL_DESTRUCT_LEVEL} || 0) +> 1 ? "Parser leaks OPs, which leak shared hash keys" : ''

use warnings 'void' ;

time ;

{
    use warnings FATAL => q(void) ;
    $a = "abc";
    length $a ;
}

join "", @(1,2,3);

print "done\n" ;
EXPECT
Useless use of time in void context at - line 4 character 1.
Useless use of length in void context at - line 9 character 5.
########
# TODO ? !%Config{usethreads} && $::UTF8 && (%ENV{PERL_DESTRUCT_LEVEL} || 0) +> 1 ? "Parser leaks OPs, which leak shared hash keys" : ''

use warnings ;

time ;

{
    use warnings FATAL => < qw(void) ;
    $a = "abc";
    length $a ;
}

join "", 1,2,3 ;

print "done\n" ;
EXPECT
Useless use of time in void context at - line 4 character 1.
Useless use of length in void context at - line 9 character 5.
########

use warnings FATAL => 'all';
{
    no warnings;
    my $b ; chop $b;
    {
        use warnings ;
        my $b ; chop $b;
    }
}
my $b ; chop $b;
print STDERR "The End.\n" ;
EXPECT
Use of uninitialized value $b in scalar chop at - line 8 character 17.
Use of uninitialized value $b in scalar chop at - line 11 character 9.
########

use warnings FATAL => 'all';
{
    no warnings FATAL => 'all';
    my $b ; chop $b;
    {
        use warnings ;
        my $b ; chop $b;
    }
}
my $b ; chop $b;
print STDERR "The End.\n" ;
EXPECT
Use of uninitialized value $b in scalar chop at - line 8 character 17.
Use of uninitialized value $b in scalar chop at - line 11 character 9.
########

use warnings FATAL => 'all';
{
    no warnings 'syntax';
    {
        use warnings ;
        my $b ; chop $b;
    }
}
my $b ; chop $b;
print STDERR "The End.\n" ;
EXPECT
Use of uninitialized value $b in scalar chop at - line 7 character 17.
########

use warnings FATAL => 'syntax', NONFATAL => 'void' ;

$a = "abc";
length $a;
print STDERR "The End.\n" ;
EXPECT
Useless use of length in void context at - line 5 character 1.
The End.
########

use warnings FATAL => 'all', NONFATAL => 'void' ;

$a = "abc";
length $a;
print STDERR "The End.\n" ;
EXPECT
Useless use of length in void context at - line 5 character 1.
The End.
########

use warnings FATAL => 'all', NONFATAL => 'void' ;

my $a ; chomp $a;

$b = "abc" ;
length $b;
print STDERR "The End.\n" ;
EXPECT
Useless use of length in void context at - line 7 character 1.
Use of uninitialized value $a in scalar chomp at - line 4 character 9.
########

use warnings FATAL => 'void', NONFATAL => 'void' ;
$a = "abc";
length $a;
print STDERR "The End.\n" ;
EXPECT
Useless use of length in void context at - line 4 character 1.
The End.
########
# TODO ? !%Config{usethreads} && $::UTF8 && (%ENV{PERL_DESTRUCT_LEVEL} || 0) +> 1 ? "Parser leaks OPs, which leak shared hash keys" : ''

use warnings NONFATAL => 'void', FATAL => 'void' ;
$a = "abc";
length $a;
print STDERR "The End.\n" ;
EXPECT
Useless use of length in void context at - line 4 character 1.
########

use warnings FATAL => 'all', NONFATAL => 'io';
no warnings 'once';

open(F, "<", "true\ncd");
close "fred" ;
print STDERR "The End.\n" ;
EXPECT
close() on unopened filehandle fred at - line 6 character 1.
The End.
########

use warnings FATAL => 'all', NONFATAL => 'io', FATAL => 'unopened' ;
no warnings 'once';

open(F, "<", "true\ncd");
close "fred" ;
print STDERR "The End.\n" ;
EXPECT
close() on unopened filehandle fred at - line 6 character 1.
########
