The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;
use Test::More;

use Cond::Expr;

sub cond_list {
    my ($answer) = @_;

    return (
        foo => 'bar',
        (cond ($answer) { has_answer => 1 }),
        (cond
            ($answer == 42) { answer => $answer }
            ($answer)       { wrong_answer => 1 }
            otherwise       { no_answer    => 1 }
        ),
    );
}

sub cond_scalar {
    my ($answer) = @_;

    return cond
        ($answer == 42) { $answer        }
        ($answer)       { 'wrong_answer' }
        otherwise       { 'no_answer'    };
}

is_deeply
    { cond_list(0) },
    { foo => 'bar', no_answer => 1 };

is_deeply
    { cond_list(1) },
    { foo => 'bar', has_answer => 1, wrong_answer => 1 };

is_deeply
    { cond_list(42) },
    { foo => 'bar', has_answer => 1, answer => 42 };

is cond_list(0), 1;
is cond_list(1), 1;
is cond_list(42), 42;

is cond_scalar(0), 'no_answer';
is cond_scalar(1), 'wrong_answer';
is cond_scalar(42), 42;

is_deeply [cond_scalar(0)], ['no_answer'];
is_deeply [cond_scalar(1)], ['wrong_answer'];
is_deeply [cond_scalar(42)], [42];

is cond, undef;
is_deeply [cond], [];

done_testing;