Test no feature indirect.

__END__
# NAME feature indirect
use feature 'say';
package Foo {
  sub new { bless {}, shift }
}
# various indirect object look-alikes
my $foox = "foox";
print STDERR "Hello\n";
printf STDERR "Test%s\n", "x";
say STDERR "Hello";
exec $foox "foo", "bar";
system $foox "foo", "bar";
my $x = new Foo;
no feature "indirect";
print STDERR "Hello\n";
printf STDERR "Test%s\n", "x";
say STDERR "Hello";
exec $foox "foo", "bar";
system $foox "foo", "bar";
my $y = new Foo;
EXPECT
OPTIONS fatal
Bareword found where operator expected (Do you need to predeclare "new"?) at - line 19, near "new Foo"
syntax error at - line 19, near "new Foo"
Execution of - aborted due to compilation errors.
########
# NAME METHOD BLOCK
use feature 'say';
package Foo {
  sub new { bless {}, shift }
}
# make sure this works (either way)
my $st = STDOUT;
print { $st } "Foo\n";
say { $st } "Foo";

# make sure this continues to work by default
my $class = "Foo";
my $x = new { $class };

use feature "indirect";

# and with it explicitly enabled

print { $st } "Foo\n";
say { $st } "Foo";

my $y = new { $class };


no feature "indirect";

# and only the indirect now fails
print { $st } "Foo\n";
say { $st } "Foo";
my $z = new { $class };

EXPECT
OPTIONS fatal
syntax error at - line 29, near "new { "
Execution of - aborted due to compilation errors.
########
# NAME METHOD SCALAR
use feature 'say';
package Foo {
  sub new { bless {}, shift }
}
# make sure this works (either way)
my $st = STDOUT;
print $st "Foo\n";
say $st "Foo";

# make sure this continues to work by default
my $class = "Foo";
my $x = new $class;

use feature "indirect";

# and with it explicitly enabled

print $st "Foo\n";
say $st "Foo";

my $y = new $class;


no feature "indirect";

# and only the indirect now fails
print $st "Foo\n";
say $st "Foo";
my $z = new $class;

EXPECT
OPTIONS fatal
Scalar found where operator expected (Do you need to predeclare "new"?) at - line 29, near "new $class"
syntax error at - line 29, near "new $class"
Execution of - aborted due to compilation errors.
########
# NAME FUNCMETH SCALAR
use feature 'say';
package Foo {
  sub new { bless {}, shift }
}
# make sure this works (either way)
my $st = STDOUT;
print $st ("Foo\n");
say $st ("Foo");

# make sure this continues to work by default
my $class = "Foo";
my $x = new $class ();

use feature "indirect";

# and with it explicitly enabled

print $st ("Foo\n");
say $st ("Foo");

my $y = new $class ();


no feature "indirect";

# and only the indirect now fails
print $st ("Foo\n");
say $st ("Foo");
my $z = new $class ();

EXPECT
OPTIONS fatal
Scalar found where operator expected (Do you need to predeclare "new"?) at - line 29, near "new $class"
syntax error at - line 29, near "new $class "
Execution of - aborted due to compilation errors.
