The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl

use strict;
use warnings;

use if (-d 't'), lib => 't';

use File::Spec;
use Test::More tests => 18;

{
    use mysubs2 test => sub { pass(shift) };

    BEGIN {
        require test_1;
    }

    test('previous: require');

    ok(test1(), "previous: lexical subs don't leak into packages re-opened via require");

    {
        test('nested: require');
        ok(test1(), "nested: lexical subs don't leak into packages re-opened via require");
    }

    test('next: require');
    ok(test1(), "next: lexical subs don't leak into packages re-opened via require");
}

{
    use mysubs2 test => sub { pass(shift) };
    use test_2;

    test('previous: use');
    ok(test2(), "previous: lexical subs don't leak into packages re-opened via use");

    {
        test('nested: use');
        ok(test2(), "nested: lexical subs don't leak into packages re-opened via use");
    }

    test('next: use');
    ok(test2(), "next: lexical subs don't leak into packages re-opened via use");
}

{
    use mysubs2 test => sub { pass(shift) };

    BEGIN {
        my $file = (-d 't') ? File::Spec->catfile('t', 'test_3.pm') : 'test_3.pm';
        do $file;
    }

    test('previous: do FILE');
    ok(test3(), "previous: lexical subs don't leak into packages re-opened via do FILE");

    {
        test('nested: do FILE');
        ok(test3(), "nested: lexical subs don't leak into packages re-opened via do FILE");
    }

    test('next: do FILE');
    ok(test3(), "next: lexical subs don't leak into packages re-opened via do FILE");
}