The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Parse::Crontab::Entry::Env;
use 5.008_001;
use strict;
use warnings;
use Mouse;
extends 'Parse::Crontab::Entry';

has _pair => (
    is  => 'ro',
    isa => 'ArrayRef',
    default => sub {
        my $self = shift;
        [split /=/, $self->line, 2];
    },
    auto_deref => 1,
);

has key => (
    is  => 'ro',
    isa => 'Str',
    default => sub {
        my $self = shift;
        $self->_handle_kv($self->_pair->[0]);
    }
);

has value => (
    is  => 'ro',
    isa => 'Str',
    default => sub {
        my $self = shift;
        $self->_handle_kv($self->_pair->[1]);
    }
);

no Mouse;

sub _handle_kv {
    my ($self, $str) = @_;
    my $org_str = $str;

    $str =~ s/^\s+//;
    $str =~ s/\s+$//;

    if (my ($quote) = $str =~ /^(['"])/) {
        $str =~ s/^$quote(.*)$quote/$1/;

        if ($str =~ /$quote/) {
            $self->set_error("value: $org_str is not valid.");
            return '';
        }
    }
    $str;
}

__PACKAGE__->meta->make_immutable;