use strict;

package EvalTest;

use selfvars;

sub new {
    return bless {}, $self;
}

sub in {
    my ($n) = @args;
    $self->{n} = $n;
}

sub out {
    return $self->{n};
}

sub out2 {
    return eval { return $self->{n} };
}

sub out3 {
    return eval '$self->{n}';
}

sub out4 {
    return eval { eval '$self->{n}'; };
}

sub out5 {
    eval {
        eval { $self->{n} };
    };
}

sub out6 {
    eval q{eval '$self->{n}'};
}

sub out7 {
    eval q{eval {$self->{n}}};
}

my $depth = 20;

sub out8 {
    if ($depth == 0) {
        return eval { $self->{n}; };
    }
    $depth--;
    return eval { $self->out8; };
}

1;
