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