The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Test::DX;

use Devel::DumpTrace ':test';
use PadWalker;
use Test::More tests => 27;
use strict qw(vars subs);
use warnings;
use vars qw($g @g %g $G);

# exercise a few more edge cases for  
# Devel::DumpTrace::perform_variable_substitutions

my ($m,@m,%m,$M);
our ($o,@o,%o,$O);

$m = $o = $g = 42;
@m = @o = @g = (3,4,'foo');
%m = %o = %g = ('def' => 'ghi');

my $S = $Devel::DumpTrace::XEVAL_SEPARATOR;

save_pads();
foreach my $var (qw(g m o)) {
  my $subst = substitute("\$ $var", __PACKAGE__);
  ok($subst eq "42", "subst \$\\s+$var");

  my $xsubst = xsubstitute("\$ $var", __PACKAGE__);
  ok($xsubst eq "\$$var${S}42", "xsubst \$\\s+$var");

  $subst = substitute("\$ $var\t[ 1 ]", __PACKAGE__);
  ok($subst eq "(3,4,'foo')[ 1 ]", "subst \$\\s+$var\\s+[]");

  $subst = substitute("\@   $var  \[2,3\]",__PACKAGE__);
  ok($subst eq "(3,4,'foo')[2,3]", "subst \@\\s+$var\\s+[]")
    or diag($subst);

  $subst = substitute("\$ \t $var" . "{'key'}", __PACKAGE__);
  ok($subst eq "('def'=>'ghi'){'key'}", "subst \$\\s+$var\\s+{key}");

  $subst = substitute("sort keys \%\n$var", __PACKAGE__);
  ok($subst eq "sort keys ('def'=>'ghi')", "subst \%\\s+$var");
  $xsubst = xsubstitute("sort keys \%\n$var", __PACKAGE__);
  ok($xsubst eq "sort keys \%$var${S}('def'=>'ghi')", "xsubst \%\\s+$var");

  $subst = substitute("\@  $var  \{'p','q'}", __PACKAGE__);
  ok($subst eq "('def'=>'ghi'){'p','q'}", "subst \@\\s+$var\\s+{}");
  $xsubst = xsubstitute("\@  $var  \{'p','q'}", __PACKAGE__);
  ok($xsubst eq "\@$var${S}('def'=>'ghi'){'p','q'}", 
     "xsubst \@\\s+$var\\s+{}");
}

__END__