Script-State
view release on metacpan or search on metacpan
lib/Script/State.pm view on Meta::CPAN
package Script::State;
use strict;
use warnings;
use PadWalker qw(var_name);
use Data::Dumper;
our $VERSION = '0.03';
our $DATAFILE;
our $SCRIPT_DATA;
our $VAR_REF;
sub script_state {
my $name = var_name 1, \$_[0] or do {
require Carp;
Carp::croak('Invalid variable passed');
};
$VAR_REF->{$name} = \$_[0];
if (exists $SCRIPT_DATA->{$name}) {
$_[0] = $SCRIPT_DATA->{$name};
} elsif ($#_ >= 1) {
$_[0] = $_[1];
}
}
sub store {
if ($DATAFILE && $VAR_REF) {
open my $fh, '>', $DATAFILE or do {
warn "Could not open $DATAFILE: $!";
return;
};
my $vars = { map { $_ => ${ $VAR_REF->{$_} } } keys %$VAR_REF };
print $fh Data::Dumper->new([ $vars ])->Varname('VAR')->Terse(0)->Indent(1)->Purity(1)->Dump;
close $fh;
return 1;
}
}
sub import {
my ($class, %args) = @_;
$DATAFILE = delete $args{-datafile} || do {
require File::Spec;
my ($vol, $dirs, $file) = File::Spec->splitpath($0);
File::Spec->catpath($vol, $dirs, ".$file.pl");
};
$SCRIPT_DATA = -r $DATAFILE ? do { do $DATAFILE; no strict 'vars'; $VAR1 } : {}; ## no critic
my $pkg = caller;
no strict 'refs';
*{ "$pkg\::script_state" } = \&script_state;
}
END {
__PACKAGE__->store;
}
1;
__END__
( run in 1.204 second using v1.01-cache-2.11-cpan-39bf76dae61 )