#!perl -T ## no critic (TidyCode)

use strict;
use warnings;
use Carp qw(confess);
use English qw(-no_match_vars $OS_ERROR);
use Locale::TextDomain::OO;
use Locale::TextDomain::OO::Lexicon::File::PO;

# be able to read the the file example/lib/MyAutotranslatorCache.pm
use lib './lib';

our $VERSION = 0;

Locale::TextDomain::OO::Lexicon::File::PO
    ->new(
        logger => sub { () = print shift, "\n" },
    )
    ->lexicon_ref({
        search_dirs => [ './LocaleData' ],
        decode      => 1, # from ISO-8859-1, see header of po file
        data        => [
            'de:cache_en:' => 'de/cache_en/example.po',
        ],
    });

my $loc = Locale::TextDomain::OO->new(
    language => 'de',
    category => 'cache_en',
    logger   => sub { () = print shift, "\n" },
    plugins  => [ qw( Expand::Gettext ) ],
);

# run translations
() = print
    $loc->__('static'),
    "\n",
    $loc->__('not in po file'),
    "\n";

# $Id: 18_autotranslation_cached.pl 637 2017-02-23 16:21:35Z steffenw $

__END__

Output:

Lexicon "de:cache_en:" loaded from file "LocaleData/de/cache_en/example.po".
Using lexicon "de:cache_en:". msgstr not found for msgctxt=undef, msgid="not in po file".
statisch
nicht im po File