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 tests => 5;
use Log::Handler;

my $CHECKED;

sub check_struct {
    $CHECKED = 1;
    my $message = shift;
    my $value   = '';

    if (ref($message) eq 'HASH') {
        ok(1, "checking hashref");
        $value = $message->{xname};
        ok($value eq 'xvalue', "checking scalar ret value");
        $value = $message->{yname};
        ok($value eq 'yvalue', "checking code ret value");
    } else {
        ok(0, "checking hashref");
    }
}

my $log = Log::Handler->new();

$log->set_pattern('%X', 'xname', 'xvalue');
$log->set_pattern('%Y', 'yname', sub { 'xxxxxx' });

$log->add(
    forward => {
        forward_to      => \&check_struct,
        maxlevel        => 'debug',
        minlevel        => 'debug',
        message_layout  => '%m',
        message_pattern => [ qw/%X %Y/ ],
    }
);

ok(1, 'new');

$log->set_pattern('%Y', 'yname', sub { 'yvalue' });
$log->debug('foo');

ok($CHECKED, "call check_struct()");