The Perl Toolchain Summit 2025 Needs You: You can help 🙏 Learn more

use strict;
use YAML::XS ();
our $_CACHE;
## TODO: publish this to CPAN as its own module
### FIXME publish as its own package
### and provide one import function which can old its own cache
sub LoadData {
my ($pkg) = @_;
$pkg //= (caller(0))[0];
return LoadDataFrom($pkg);
}
sub LoadDataFrom {
my ($pkg) = @_;
die "undefined package" unless defined $pkg;
$_CACHE //= {};
return $_CACHE->{$pkg} if $_CACHE->{$pkg};
my $data;
{
local $/;
my $fh = eval '\*' . $pkg . '::DATA';
$data = <$fh>;
}
return unless defined $data;
$_CACHE->{$pkg} = YAML::XS::Load($data);
return $_CACHE->{$pkg};
}
sub clear_cache {
$_CACHE = {};
}
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
OpenStack::MetaAPI::Helpers::DataAsYaml
=head1 VERSION
version 0.003
=head1 AUTHOR
Nicolas R <atoomic@cpan.org>
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2019 by cPanel, Inc.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
=cut