Uname: Linux web3.us.cloudlogin.co 5.10.226-xeon-hst #2 SMP Fri Sep 13 12:28:44 UTC 2024 x86_64
Software: Apache
PHP version: 8.1.31 [ PHP INFO ] PHP os: Linux
Server Ip: 162.210.96.117
Your Ip: 3.133.79.73
User: edustar (269686) | Group: tty (888)
Safe Mode: OFF
Disable Function:
NONE

name : YAML.pm
package Git::SVN::Memoize::YAML;
use warnings $ENV{GIT_PERL_FATAL_WARNINGS} ? qw(FATAL all) : ();
use strict;
use YAML::Any ();

# based on Memoize::Storable.

sub TIEHASH {
	my $package = shift;
	my $filename = shift;
	my $truehash = (-e $filename) ? YAML::Any::LoadFile($filename) : {};
	my $self = {FILENAME => $filename, H => $truehash};
	bless $self => $package;
}

sub STORE {
	my $self = shift;
	$self->{H}{$_[0]} = $_[1];
}

sub FETCH {
	my $self = shift;
	$self->{H}{$_[0]};
}

sub EXISTS {
	my $self = shift;
	exists $self->{H}{$_[0]};
}

sub DESTROY {
	my $self = shift;
	YAML::Any::DumpFile($self->{FILENAME}, $self->{H});
}

sub SCALAR {
	my $self = shift;
	scalar(%{$self->{H}});
}

sub FIRSTKEY {
	'Fake hash from Git::SVN::Memoize::YAML';
}

sub NEXTKEY {
	undef;
}

1;
__END__

=head1 NAME

Git::SVN::Memoize::YAML - store Memoized data in YAML format

=head1 SYNOPSIS

    use Memoize;
    use Git::SVN::Memoize::YAML;

    tie my %cache => 'Git::SVN::Memoize::YAML', $filename;
    memoize('slow_function', SCALAR_CACHE => [HASH => \%cache]);
    slow_function(arguments);

=head1 DESCRIPTION

This module provides a class that can be used to tie a hash to a
YAML file.  The file is read when the hash is initialized and
rewritten when the hash is destroyed.

The intent is to allow L<Memoize> to back its cache with a file in
YAML format, just like L<Memoize::Storable> allows L<Memoize> to
back its cache with a file in Storable format.  Unlike the Storable
format, the YAML format is platform-independent and fairly stable.

Carps on error.

=head1 DIAGNOSTICS

See L<YAML::Any>.

=head1 DEPENDENCIES

L<YAML::Any> from CPAN.

=head1 INCOMPATIBILITIES

None reported.

=head1 BUGS

The entire cache is read into a Perl hash when loading the file,
so this is not very scalable.
© 2025 GrazzMean