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;

=pod

A conditional statement modifier that tries to avoid calling undef as
a coderef will instead trip over a pugs cast failure, but only if the
value is actually undef:

    pugs> my $a = sub { 1 }; my $b; sub c($code) { return 1 if $code and $code(); return 0 }
    undef
    pugs> c($a)
    1
    pugs> c($b)
    pugs: cannot cast from VUndef to Pugs.AST.Internals.VCode

This causes pugs to exit.

=cut

plan 2;

{
    my $a = sub { 1 };
    my $b;
    sub c($code) { return 1 if $code and $code(); return 2 }

    is c($a), 1, 'shortcircuit idiom given coderef works';

    # This one will just kill pugs with the cast failure, so force fail
    is try { c($b) }, 2, 'shortcircuit idiom given undef works', :todo<bug>;
}