#!perl -T
-package Dongs;
+package NotEmpty;
sub new;
use strict;
use warnings;
-use Test::More tests => 80 * 8;
+use Test::More tests => 119 * 8 + 10;
BEGIN { delete $ENV{PERL_INDIRECT_PM_DISABLE} }
skip "$_: $skip" => 8 if eval $skip;
{
+ local $_ = $_;
+ s/Pkg/Empty/g;
+
try "return; $prefix; use indirect; $_";
is $@, '', "use indirect: $_";
is @warns, 0, 'no reports';
{
local $_ = $_;
- s/Hlagh/Dongs/g;
+ s/Pkg/NotEmpty/g;
try "return; $prefix; use indirect; $_";
is $@, '', "use indirect, defined: $_";
}
}
+# These tests must be run outside of eval to be meaningful.
+{
+ sub Zlott::Owww::new { }
+
+ my (@warns, $hook, $desc, $id);
+ BEGIN {
+ $hook = sub { push @warns, indirect::msg(@_) };
+ $desc = "test sort and line endings %d: no indirect construct";
+ $id = 1;
+ }
+
+ BEGIN { @warns = () }
+ {
+ no indirect hook => $hook;
+ my @stuff = sort Zlott::Owww
+ ->new;
+ }
+ BEGIN { is_deeply \@warns, [ ], sprintf $desc, $id++ }
+
+ BEGIN { @warns = () }
+ {
+ no indirect hook => $hook;
+ my @stuff = sort Zlott::Owww
+ ->new;
+ };
+ BEGIN { is_deeply \@warns, [ ], sprintf $desc, $id++ }
+
+ BEGIN { @warns = () }
+ {
+ no indirect hook => $hook;
+ my @stuff = sort Zlott::Owww
+ ->new;
+ }
+ BEGIN { is_deeply \@warns, [ ], sprintf $desc, $id++ }
+
+ BEGIN { @warns = () }
+ {
+ no indirect hook => $hook;
+ my @stuff = sort Zlott::Owww
+ ->new;
+ }
+ BEGIN { is_deeply \@warns, [ ], sprintf $desc, $id++ }
+
+ BEGIN { @warns = () }
+ {
+ no indirect hook => $hook;
+ my @stuff = sort Zlott::Owww
+ ->new;
+ }
+ BEGIN { is_deeply \@warns, [ ], sprintf $desc, $id++ }
+
+ BEGIN { @warns = () }
+ {
+ no indirect hook => $hook;
+ my @stuff = sort Zlott::Owww
+ ->new;
+ }
+ BEGIN { is_deeply \@warns, [ ], sprintf $desc, $id++ }
+
+ BEGIN { @warns = () }
+ {
+ no indirect hook => $hook;
+ my @stuff = sort Zlott::Owww
+ ->new;
+ }
+ BEGIN { is_deeply \@warns, [ ], sprintf $desc, $id++ }
+
+ BEGIN { @warns = () }
+ {
+ no indirect hook => $hook;
+ my @stuff = sort Zlott::Owww
+ ->new;
+ }
+ BEGIN { is_deeply \@warns, [ ], sprintf $desc, $id++ }
+
+ BEGIN { @warns = () }
+ {
+ no indirect hook => $hook;
+ my @stuff = sort Zlott::Owww
+ ->new;
+ }
+ BEGIN { is_deeply \@warns, [ ], sprintf $desc, $id++ }
+
+ BEGIN { @warns = () }
+ {
+ no indirect hook => $hook;
+ my @stuff = sort Zlott::Owww
+ ->new;
+ }
+ BEGIN { is_deeply \@warns, [ ], sprintf $desc, $id++ }
+}
+
__DATA__
-$obj = Hlagh->new;
+$obj = Pkg->new;
####
-$obj = Hlagh->new();
+$obj = Pkg->new();
####
-$obj = Hlagh->new(1);
+$obj = Pkg->new(1);
####
-$obj = Hlagh->new(q{foo}, bar => $obj);
+$obj = Pkg->new(q{foo}, bar => $obj);
####
-$obj = Hlagh -> new ;
+$obj = Pkg -> new ;
####
-$obj = Hlagh -> new ( ) ;
+$obj = Pkg -> new ( ) ;
####
-$obj = Hlagh -> new ( 1 ) ;
+$obj = Pkg -> new ( 1 ) ;
####
-$obj = Hlagh -> new ( 'foo' , bar => $obj );
+$obj = Pkg -> new ( 'foo' , bar => $obj );
####
-$obj = Hlagh
+$obj = Pkg
->
new ;
####
-$obj = Hlagh
+$obj = Pkg
->
new (
) ;
####
-$obj = Hlagh
+$obj = Pkg
-> new (
1 ) ;
####
-$obj = Hlagh ->
+$obj = Pkg ->
new ( "foo"
, bar
=> $obj );
####
$obj = newnew->new;
####
-$obj = Hlagh->$cb;
+$obj = Pkg->$cb;
####
-$obj = Hlagh->$cb();
+$obj = Pkg->$cb();
####
-$obj = Hlagh->$cb($pkg);
+$obj = Pkg->$cb($pkg);
####
-$obj = Hlagh->$cb(sub { 'foo' }, bar => $obj);
+$obj = Pkg->$cb(sub { 'foo' }, bar => $obj);
####
-$obj = Hlagh->$meth;
+$obj = Pkg->$meth;
####
-$obj = Hlagh
+$obj = Pkg
->
$meth ( 1, 2 );
####
####
$obj = $pkg->$cb( $obj );
####
-$obj = $pkg->$cb(qw/foo bar baz/);
+$obj = $pkg->$cb(qw<foo bar baz>);
####
$obj = $pkg->$meth;
####
meh $y;
####
meh $y, 1, 2;
-#### $] < 5.010 # use feature 'state'; state $z
+#### "$]" < 5.010 # use feature 'state'; state $z
meh $z;
-#### $] < 5.010 # use feature 'state'; state $z
+#### "$]" < 5.010 # use feature 'state'; state $z
meh $z, 1, 2;
####
print;
####
print $y;
####
-print $y "dongs\n";
-#### $] < 5.010 # use feature 'state'; state $z
+print $y "hello thar\n";
+#### "$]" < 5.010 # use feature 'state'; state $z
print $z;
-#### $] < 5.010 # use feature 'state'; state $z
-print $z "hlagh\n";
+#### "$]" < 5.010 # use feature 'state'; state $z
+print $z "lolno\n";
####
print STDOUT "bananananananana\n";
####
$obj = "apple ${\($y->$meth)} pear"
####
$obj = "apple @{[$y->$meth]} pear"
-####
-$obj = "apple ${\(new Hlagh)} pear"
-####
-$obj = "apple @{[new Hlagh]} pear"
-####
-$obj = "apple ${\(new $x)} pear"
-####
-$obj = "apple @{[new $x]} pear"
-####
-$obj = "apple ${\(new $y)} pear"
-####
-$obj = "apple @{[new $y]} pear"
+#### # local $_ = "foo";
+s/foo/return; Pkg->new/e;
+#### # local $_ = "bar";
+s/foo/return; Pkg->new/e;
+#### # local $_ = "foo";
+s/foo/return; Pkg->$cb/e;
+#### # local $_ = "bar";
+s/foo/return; Pkg->$cb/e;
+#### # local $_ = "foo";
+s/foo/return; Pkg->$meth/e;
+#### # local $_ = "bar";
+s/foo/return; Pkg->$meth/e;
+#### # local $_ = "foo";
+s/foo/return; $x->new/e;
+#### # local $_ = "bar";
+s/foo/return; $x->new/e;
+#### # local $_ = "foo";
+s/foo/return; $x->$cb/e;
+#### # local $_ = "bar";
+s/foo/return; $x->$cb/e;
+#### # local $_ = "foo";
+s/foo/return; $x->$meth/e;
+#### # local $_ = "bar";
+s/foo/return; $x->$meth/e;
+#### # local $_ = "foo";
+s/foo/return; $y->new/e;
+#### # local $_ = "bar";
+s/foo/return; $y->new/e;
+#### # local $_ = "foo";
+s/foo/return; $y->$cb/e;
+#### # local $_ = "bar";
+s/foo/return; $y->$cb/e;
+#### # local $_ = "foo";
+s/foo/return; $y->$meth/e;
+#### # local $_ = "bar";
+s/foo/return; $y->$meth/e;
+####
+"foo" =~ /(?{Pkg->new})/;
+####
+"foo" =~ /(?{Pkg->$cb})/;
+####
+"foo" =~ /(?{Pkg->$meth})/;
+####
+"foo" =~ /(?{$x->new})/;
+####
+"foo" =~ /(?{$x->$cb})/;
+####
+"foo" =~ /(?{$x->$meth})/;
+####
+"foo" =~ /(?{$y->new})/;
+####
+"foo" =~ /(?{$y->$cb})/;
+####
+"foo" =~ /(?{$y->$meth})/;
####
exec $x $x, @a;
####
zap { 1; 1; };
####
zap { zap { }; 1; };
+####
+my @stuff = sort Pkg
+ ->new;
+####
+my @stuff = sort Pkg
+ ->new;
+####
+my @stuff = sort Pkg
+ ->new;
+####
+my @stuff = sort Pkg
+ ->new;
+####
+my @stuff = sort Pkg
+ ->new;
+####
+my @stuff = sort Pkg
+ ->new;
+####
+my @stuff = sort Pkg
+ ->new;
+####
+my @stuff = sort Pkg
+ ->new;
+####
+sub {
+ my $self = shift;
+ return $self->new ? $self : undef;
+}
+####
+sub {
+ my $self = shift;
+ return $self ? $self->new : undef;
+}
+####
+sub {
+ my $self = shift;
+ return $_[0] ? undef : $self->new;
+}
+####
+package Hurp;
+__PACKAGE__->new;
+####
+package Hurp;
+__PACKAGE__->new # Hurp
+####
+package Hurp;
+__PACKAGE__->new;
+# Hurp
+####
+package __PACKAGE_;
+__PACKAGE__->new # __PACKAGE_
+####
+package __PACKAGE_;
+__PACKAGE_->new # __PACKAGE__
+####
+package __PACKAGE___;
+__PACKAGE__->new # __PACKAGE___
+####
+package __PACKAGE___;
+__PACKAGE___->new # __PACKAGE__