$bibfile = Text::BibTeX::File->new('foo.bib') # open file or die "foo.bib: $!\n"; $entry = Text::BibTeX::Entry->new($bibfile); # parse first entry
Using this code, you might get an ``undefined macro'' warning for every entry parsed from foo.bib. Apart from the superficial annoyance of all those warning messages, the undefined macros are expanded as empty strings, meaning you lose any information about them---not good.
You could always kludge it and forcibly define the month macros yourself. Prior to release 0.30, this had to be done by parsing a set of fake entries, but now "Text::BibTeX" provides a direct interface to the underlying macro table. You could just do this before parsing any entries:
use Text::BibTeX qw(:macrosubs); # ... my %month = (jan => 'January', feb => 'February', ... ); add_macro_text ($macro, $value) while (($macro, $value) = each %month);
But there's a better way that's more in keeping with how things are done under BibTeX (where default macros are defined in the style file): use "Text::BibTeX"'s object-oriented analogue to style files, called structure modules. "Text::BibTeX" provides a structure module, "Text::BibTeX::Bib", that (partially) emulates the standard style files of BibTeX 0.99, including the definition of month macros. Structure modules are specified on a per-file basis by using the "set_structure" method on a "Text::BibTeX::File" object. It's quite simple to tell "Text::BibTeX" that entries from $bibfile are expected to conform to the "Bib" structure (which is implemented by the "Text::BibTeX::Bib" module, but you don't really need to know that):
$bibfile = Text::BibTeX::File->new('foo.bib') or die "foo.bib: $!\n"; $bibfile->set_structure ('Bib');
You probably shouldn't hardcode the name of a particular structure in your programs, though, as there will eventually be a multitude of structure modules to choose from (just as there are a multitude of BibTeX style files to choose from). My preferred approach is to make the structure a command-line option which defaults to "Bib" (since that's the only structure actually implemented as of this writing).
my $append_file = Text::BibTeX::File->new(">>$filename") or die "couldn't open $filename for appending: $!\n";
opens $filename for appending. If, later on, you have an entry from another file (say $entry), then you can append it to $append_file by just writing it as usual:
$entry->write ($append_file);
See "append_entries" in the examples/ subdirectory of the "Text::BibTeX" distribution for a complete example.