… | |
… | |
29 | |
29 | |
30 | =cut |
30 | =cut |
31 | |
31 | |
32 | package Games::Go::SGF::Grove; |
32 | package Games::Go::SGF::Grove; |
33 | |
33 | |
34 | use base Exporter; |
|
|
35 | |
|
|
36 | use strict; |
34 | use strict; |
37 | no warnings; |
35 | no warnings; |
|
|
36 | |
|
|
37 | use Carp; |
|
|
38 | |
|
|
39 | use base Exporter; |
38 | |
40 | |
39 | our $VERSION = 0.1; |
41 | our $VERSION = 0.1; |
40 | our @EXPORT = qw(load_sgf save_sgf encode_sgf decode_sgf); |
42 | our @EXPORT = qw(load_sgf save_sgf encode_sgf decode_sgf); |
41 | |
43 | |
42 | =item $game = load_sgf $path |
44 | =item $game = load_sgf $path |
… | |
… | |
74 | |
76 | |
75 | sub load_sgf($) { |
77 | sub load_sgf($) { |
76 | my ($path) = @_; |
78 | my ($path) = @_; |
77 | |
79 | |
78 | open my $fh, "<:perlio", $path |
80 | open my $fh, "<:perlio", $path |
79 | or die "$path: $!"; |
81 | or Carp::croak "$path: $!"; |
80 | |
82 | |
81 | local $/; |
83 | local $/; |
82 | decode_sgf <$fh> |
84 | decode_sgf <$fh> |
83 | } |
85 | } |
84 | |
86 | |
85 | sub save_sgf($$) { |
87 | sub save_sgf($$) { |
86 | my ($path, $game) = @_; |
88 | my ($path, $game) = @_; |
87 | |
89 | |
88 | open my $fh, ">:perlio", $path |
90 | open my $fh, ">:perlio", $path |
89 | or die "$path: $!"; |
91 | or Carp::croak "$path: $!"; |
90 | |
92 | |
91 | print $fh encode_sgf $game; |
93 | print $fh encode_sgf $game; |
92 | } |
94 | } |
93 | |
95 | |
94 | =back |
96 | =back |