package Brackup::Metafile;
use strict;
use warnings;
use Carp qw(croak);
sub new {
my ($class) = @_;
return bless {}, $class;
}
sub open {
my ($class, $file) = @_;
unless (-e $file) {
die "Unable to open metafile $file\n";
}
my $self = __PACKAGE__->new;
$self->{filename} = $file;
open $self->{fh}, "<", $file;
$self->{linenum} = 0;
return $self;
}
sub readline {
my $self = shift;
my $ret = {};
my $line; #
my $fh = $self->{fh};
while (defined ($line = <$fh>)) {
$self->{linenum}++;
if ($line =~ /^([\w\-]+):\s*(.+)/) {
$ret->{$1} = $2;
$self->{last} = \$ret->{$1};
next;
}
if ($line eq "\n") {
return $ret;
}
if ($line =~ /^\s+(.+)/) {
die "Can't continue line without start" unless $self->{last};
${ $self->{last} } .= " $1";
next;
}
$line =~ s/[:^print:]/?/g;
die "Unexpected line in metafile $self->{file}, line $self->{linenum}: $line";
}
return undef;
}
1;
syntax highlighted by Code2HTML, v. 0.9.1