Convert-yEnc
view release on metacpan or search on metacpan
lib/Convert/yEnc/RC.pm view on Meta::CPAN
package Convert::yEnc::RC;
use strict;
use Convert::yEnc::Entry;
use warnings;
use overload 'eq' => \&_eq;
sub new
{
my ($class, $file) = @_;
my $rc = { };
bless $rc, $class;
$rc->load($file) if $file;
$rc
}
sub load
{
my($rc, $file) = @_;
$rc->{file } = $file;
$rc->{db } = { };
no warnings qw(uninitialized);
open RC, $file or return undef;
while (my $line = <RC>)
{
$line =~ /\S/ or next;
my($name, $rest) = split "\t", $line, 2;
my $entry = load Convert::yEnc::Entry $rest;
$rc->{db}{$name} = $entry;
}
close(RC);
1
}
sub update
{
my($rc, $line) = @_;
my($tag, @fields) = split ' ', $line;
my %field;
for my $field (@fields)
{
my($key, $val) = split /=/, $field;
$field{$key} = $val;
}
$line =~ s(\s+$)();
my($name) = $line =~ /name=\s*(.*)/; # Die! Die! Die!
$field{name} = $name if $name;
$tag =~ s/^=/_/;
$rc->can($tag) and $rc->$tag(\%field)
}
sub _ybegin
{
my($rc, $fields) = @_;
my $name = $fields->{name};
$name or return 0;
my $entry = $rc->{db}{$name};
if ($entry)
{
$rc->{current} = $entry;
return $entry->ybegin($fields);
}
$rc->{current} = $rc->{db}{$name} = new Convert::yEnc::Entry $fields;
}
sub _ypart
{
my($rc, $fields) = @_;
my $entry = $rc->{current};
$entry and $entry->ypart($fields);
}
sub _yend
{
my($rc, $fields) = @_;
my $entry = $rc->{current};
delete $rc->{current};
$entry and $entry->yend($fields);
}
sub files
{
my $rc = shift;
( run in 0.489 second using v1.01-cache-2.11-cpan-39bf76dae61 )