Data-Beacon
view release on metacpan or search on metacpan
lib/Data/Beacon.pm view on Meta::CPAN
# initlialize TIMESTAMP
if ($self->{mtime}) {
my @stat = stat( $self->{from} );
$self->meta('TIMESTAMP', gmtime( $stat[9] )->datetime() . 'Z' );
}
# start parsing
my $line = $self->_readline();
return unless defined $line;
$line =~ s/^\xEF\xBB\xBF//; # UTF-8 BOM (optional)
do {
$line =~ s/^\s+|\s*\n?$//g;
if ($line eq '') {
$self->{line}++;
} elsif ($line =~ /^#([^:=\s]+)(\s*[:=]?\s*|\s+)(.*)$/) {
$self->{line}++;
eval { $self->meta($1,$3); };
if ($@) {
my $msg = $@; $msg =~ s/ at .*$//;
$b->parse( \"x:from|x:to\n\n|comment" );
is( $b->count, 1, 'parse from string' );
is( $b->line, 3, '' );
is_deeply( [$b->link], ['x:from','','','x:to'] );
is_deeply( [$b->expanded], ['x:from','','','x:to'] );
$b->parse( \"\xEF\xBB\xBFx:from|x:to", links => sub { @l = @_; } );
is( $b->line, 1 );
is( $b->errors, 0 );
is_deeply( \@l, [ 'x:from', '', '', 'x:to' ], 'BOM' );
my @tmplines = ( '#FOO: bar', '#DOZ', '#BAZ: doz' );
$b->parse( from => sub { return shift @tmplines; } );
is( $b->line, 3, 'parse from code ref' );
is( $b->count, 0, '' );
is( $b->metafields, "#FORMAT: BEACON\n#BAZ: doz\n#FOO: bar\n#COUNT: 0\n" );
is( $b->link, undef, 'no links' );
$b->parse( from => sub { die 'hard'; } );
( run in 0.410 second using v1.01-cache-2.11-cpan-f29a10751f0 )