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

use v6;
use Test;

plan 8;

# sanity: declarations and very simple use (scoping tests come later)
# we take care to use different names to avoid other *kinds* of insanity.

is((try {              my $a1 = my    $b1 = 42; $b1++; ($a1, $b1) }).perl, '(\\42, \\43)', "chained my");
is((try {              my $a2 = our   $b2 = 42; $b2++; ($a2, $b2) }).perl, '(\\42, \\43)', "chained my, our");
is((try {              my $a3 = let   $b3 = 42; $b3++; ($a3, $b3) }).perl, '(\\42, \\43)', "chained my, let");
is((try {              my $a4 = env   $b4 = 42; $b4++; ($a4, $b4) }).perl, '(\\42, \\43)', "chained my, env");
is((try {              my $a5 = state $b5 = 42; $b5++; ($a5, $b5) }).perl, '(\\42, \\43)', "chained my, state");
is((try { my $b6 = 10; my $a6 = temp  $b6 = 42; $b6++; ($a6, $b6) }).perl, '(\\42, \\43)', "chained my, temp", :todo<bug>);

# scoping

is((try {
    my $sa1 = 10;
    {
        my $sa1 = our $sb1 = 42;
    }
    ($sa1, $sb1);
   }).perl, '(\\10, \\42)', "scoping my, our");

dies_ok {
    {
        our $sa2 = my $sb2 = 42;
    }
    ($sa2, $sb2);
   }, "scoping our, my ('our' doesn't leak)";

# XXX: add more!