The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl
use strict;
use warnings;
use Test::More tests => 55;
use Test::Expect;

expect_run
(
    command => "$^X -Ilib -MCarp::REPL=noprofile t/scripts/12-env.pl",
    prompt  => '$ ',
    quit    => 'exit',
);

expect_send('1 + 1');
expect_like(qr/\b2\b/, 'in the REPL');

expect_send(':e');
expect_like(qr/\$Env = {};/);

expect_send(':u');
expect_like(qr{\bNow at t/scripts/12-env\.pl:42 \(frame 1\)\.});

expect_send(':e');
expect_like(qr/\$Env = {(?!};)/);
expect_like(qr/"\\\$alpha" => \\do { my \$v = 1 }/);
expect_like(qr/"%args"   => {/);
expect_like(qr/Be => 4/);
expect_like(qr/H  => 1/);
expect_like(qr/He => 2/);
expect_like(qr/Li => 3/);
expect_like(qr/"\\\$beta"  => \\do { my \$v = 2 }/);
expect_like(qr/"\\\$delta" => \\do { my \$v = 4 }/);
expect_like(qr/"\\\$gamma" => \\do { my \$v = 3 }/);

expect_send(':u');
expect_like(qr{\bNow at t/scripts/12-env\.pl:44 \(frame 2\)\.});

expect_send(':e');
expect_like(qr/\$Env = {(?!};)/);
expect_like(qr/"%args"     => {/);
expect_like(qr/Be => 4/);
expect_like(qr/H  => 1/);
expect_like(qr/He => 2/);
expect_like(qr/Li => 3/);
expect_like(qr/\+.*\+.*\+/);

expect_send(':u');
expect_like(qr{\bNow at t/scripts/12-env\.pl:28 \(frame 3\)\.});

expect_send(':e');
expect_like(qr/\$Env = {(?!};)/);
expect_like(qr/"\\\$dos"  => \\do { my \$v = 'is' }/);
expect_like(qr/"\\\$tres" => \\do { my \$v = 'I' }/);
expect_like(qr/"\\\$uno"  => \\do { my \$v = 'I' }/);

expect_send(':u');
expect_like(qr{\bNow at t/scripts/12-env\.pl:19 \(frame 4\)\.});

expect_send(':e');
expect_like(qr/\$Env = {(?!};)/);
expect_like(qr/"\\\$a" => \\do { my \$v = 'I' }/);
expect_like(qr/"\\\$b" => \\do { my \$v = 'I' }/);

expect_send(':u');
expect_like(qr{\bNow at t/scripts/12-env\.pl:13 \(frame 5\)\.});

expect_send(':e');
expect_like(qr/\$Env = { "\\\$num" => \\do { my \$v = 'I' } };/);

expect_send(':u');
expect_like(qr{\bNow at t/scripts/12-env\.pl:7 \(frame 6\)\.});

expect_send(':e');
expect_like(qr/\$Env = {};/);

expect_send(':u');
expect_like(qr{\bNow at t/scripts/12-env\.pl:52 \(frame 7\)\.});

expect_send(':e');
expect_like(qr/\$Env = {};/);

expect_send(':u');
expect_like(qr{You're already at the top frame\.});