The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

Chess::PGN::Extract - Parse PGN files by using `pgn-extract`

SYNOPSIS

use Chess::PGN::Extract;

# Slurp all games in a PGN file
my @games = read_games ("filename.pgn");

DESCRIPTION

Chess::PGN::Extract provides a function to extract chess records from Portable Game Notation (PGN) files.

Chess::PGN::Extract internally depends on JSON-enhanced pgn-extract, a command line tool to manipulate PGN files. So, please put the pgn-extract in your PATH for using this module.

If you want to deal with a huge PGN file with which slurping is expensive, consider to use Chess::PGN::Extract::Stream, which provides a file stream class to read games iteratively.

FUNCTIONS

read_games ($pgn_file)

Read all games contained in the $pgn_file at once and return an ARRAY of them.

Perl expression of one game will be something like this:

{ Event     => "LAPUTA: Castle in the Sky",
  Site      => "Tiger Moth",
  Date      => "1986.08.02",
  Round     => 1,
  White     => "Captain Dola",
  Black     => "Jicchan",
  Result    => "1-0",
  Moves     => ["e2-e4", "g7-g6"],
}

NOTE

In a typical PGN file, moves are recorded in standard algebraic notation (SAN):

1. e4 g6
...

pgn-extract converts it to long algebraic notation (LAN), and so does this module:

my ($game) = read_games ($pgn_file);
$game->{Moves} #=> ["e2-e4", "g7-g6", ...]

For details about PGN, SAN, and LAN, see, e.g., http://en.wikipedia.org/wiki/Portable_Game_Notation and http://en.wikipedia.org/wiki/Chess_notation.

SEE ALSO

Chess::PGN::Extract::Stream, Chess::PGN::Parse

BUGS

Please report any bugs to https://bitbucket.org/mnacamura/chess-pgn-extract/issues.

AUTHOR

Mitsuhiro Nakamura <m.nacamura@gmail.com>

Many thanks to David J. Barnes for his original development of pgn-extract and basicer at Bitbucket for his work on JSON enhancement.

LICENSE

Copyright (C) 2014 Mitsuhiro Nakamura.

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.