package NetHack::Logfile; our $VERSION = '1.00'; use strict; use warnings; use Carp 'croak'; use NetHack::Logfile::Entry; use Sub::Exporter -setup => { exports => [qw(read_logfile parse_logline write_logfile)], }; sub read_logfile { my $filename = @_ ? shift : "logfile"; my @entries; open my $handle, '<', $filename or croak "Unable to open $filename for reading: $!"; while (<$handle>) { push @entries, parse_logline($_); } close $handle or croak "Unable to close $filename handle: $!"; return @entries; } sub parse_logline { NetHack::Logfile::Entry->new_from_line(shift) } sub write_logfile { my $entries = shift; my $filename = shift || 'logfile'; open my $handle, '>', $filename or croak "Unable to open $filename for writing: $!"; for (@$entries) { print { $handle } $_->as_line . "\n"; } close $handle or croak "Unable to close $filename handle: $!"; return; } 1; __END__ =head1 NAME NetHack::Logfile - Parse and create NetHack logfiles =head1 VERSION version 1.00 =head1 SYNOPSIS use NetHack::Logfile ':all'; my @entries = read_logfile("logfile"); @entries = sort { $b->score <=> $a->score } @entries; splice(@entries, 2000); write_logfile(\@entries, "high-scores"); say $entries[0]->as_line; =head1 DESCRIPTION This module provides an easy way to read NetHack logfiles. You can also create logfiles. This module's interface changed drastically from C<0.01> to C<1.00>. Currently, NetHack versions 3.2.0 through 3.4.3 are supported. If you desire support for an older version, please open up a ticket on rt.cpan.org with some logfile entries for these older versions. =head1 FUNCTIONS =head2 read_logfile Takes a file (default name: F) and parses it as a logfile. If any IO error occurs in reading the file, an exception is thrown. If any error occurs in parsing a logline, an exception is thrown. This returns entries of class L. See that module for more information. =head2 parse_logline Shortcut for L. =head2 write_logfile Takes an arrayref of L objects and a filename (default name: F). If any IO error occurs, it will throw an exception. Returns no useful value. =head1 AUTHOR Shawn M Moore, C =cut