The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
WELCOME TO Chess::PGN::Parse
    Chess::PGN::Parse is a module to parse chess games. PGN stands for
    Portable Game Notation and it is regulated by a standard
    (http://www.schachprobleme.de/chessml/faq/pgn/). It is among the
    preferred means of chess games distribution. Being a public, well
    established standard, PGN is understood by many chess archive programs.

INSTALLATION
    Standard module installation procedure. Unpack the compressed archive,
    and then run 

    perl Makefile.PL 
    make 
    make test 
    make install

USAGE
    Chess::PGN::Parse has a typical Perl Object Oriented interface. You need
    to create an object, and then use its methods.

    Simple usage:

            use Chess::PGN::Parse;
            my $pgnfile = "kk_2001.pgn"; # name of the file containing PGN games

            # create an object, passing the file name as parameter
            # 
            my $pgn = new Chess::PGN::Parse $pgnfile 
                    or die "can't open $pgnfile\n";
        
            # Then, we can loop through the games, using the
            # read_game() method.
            # No special parsing in this phase. The game is
            # returned as text, without checking for comments
            # or errors
            while ($pgn->read_game()) {
                    print $pgn->white, ", " , $pgn->black, ", ", 
                            $pgn->result, ", ",
                            $pgn->game, "\n";
            }

    A more complete usage requires actual game parsing. After reading the
    game, a parse_game() method is called, and as a result we have the moves
    available in an array, comments and errors in two hashes, where the keys
    are the move numbers and the values are comments or errors.

            use Data::Dumper;
            while ($pgn->read_game()) {
                if ($pgn->parse_game({save_comments => 'yes', 
                        log_errors => 'yes' })) 
                {
                print Data::Dumper->Dump([$pgn->moves],["moves"]), "\n ";
                print Data::Dumper->Dump([$pgn->comments],["comments"]), "\n ";
                print Data::Dumper->Dump([$pgn->errors],["errors"]), "\n ";
                }
            }

    A simplified approach uses the built-in method read_all(), which reads
    and parses and returns an array of hashes with all the game details.

            use Chess::PGN::Parse;
            use Data::Dumper;
            my $pgnfile = "kk_2001.pgn";
            my $pgn = Chess::PGN::Parse->new $pgnfile 
                    or die "can't open $pgnfile\n";
            my @games = $pgn->read_all({save_comments => 'yes',
                    log_errors => 'yes' });
            print Data::Dumper->Dump([\@games}],["games"]), "\n ";

DISTRIBUTION LIST
   Changes                       A change log for this module
   MANIFEST                      The list of included files
   README                        This file
   Makefile.PL                   The Perl makefile
   Parse.pm                      The module itself
   test.pl                       The test script
   examples/kk_2001.pgn          a sample collection of PGN games
   examples/kk_game4_test.pgn    a sample PGN file with most of the strange things
                                 that a PGN could have, including errors
   examples/test_1_PGN.pl        a test script to show some features
   examples/test_2_PGN.pl        a more advanced test script
   examples/test_3_PGN.pl        a test script to parse a PGN from string
   examples/test_4_PGN.pl        a more advanced PGN string capability
                                 with also examples of customized output
   examples/test_non_standard.pl Another test with some unorthodox input
                                 to demonstrate how the enhanced version
                                 can handle these things.
   examples/test_recursion.pl    A test of RAV recursive parsing
   
AUTHOR
    Chess::PGN::Parse is copyright (C) Giuseppe Maxia 2002. All rights
    reserved. Released under the GPL (GNU General Public License) version 2,
    April 1991.

    My contact for bugs, comments, advice: gmax@cpan.org