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

use strict;
use warnings;

use Test::More;
use lib 't/lib';

BEGIN { use_ok 'multidimensional' }

my %a;

foreach (
    ['no multidimensional;', '$a{1,2} if 0'],
    ['no multidimensional;', '{ $a{1,2} if 0 }'],
    ['no multidimensional; { use multidimensional; }', '$a{1,2} if 0'],
) {
    my ($prep, $test) = @{$_};
    my $code = $prep.$test;
    eval $code;
    like $@, qr/Use of multidimensional array emulation/, $code;
    SKIP: {
        skip "lexical hints don't propagate into eval on this perl", 7
            unless "$]" >= 5.009003;
        $code = $prep." eval(q{$test}); die \$@ if \$@";
        eval $code;
        like $@, qr/Use of multidimensional array emulation/, $code;
    }
}

foreach my $code (
    'no multidimensional; { use multidimensional; $a{1,2} if 0 }',
    'no multidimensional; use multidimensional; $a{1,2} if 0',
    '{ no multidimensional; } $a{1,2} if 0',
    'no multidimensional; require MyTest',
    'no multidimensional; $a{join(my $sep = $;, 1, 2)} if 0',
    'no multidimensional; my $sep = $;; $a{join($sep, 1, 2)} if 0',
    'no multidimensional; $a{join($;, 1, 2)} if 0',
) {
    eval $code;
    is $@, "", $code;
}

done_testing;