#! /usr/bin/perl # This program is part of da_reference, and is released under the # terms of the GPL version 2, or any later version, at your # option. See the file README and COPYING for more information. # Copyright 2004 by Don Armstrong . # $Id$ use warnings; use strict; use Getopt::Long; use Reference; use Pod::Usage; =head1 NAME get_reference - Retrieve a reference from somewhere and output the formatted reference to STDOUT. =head1 SYNOPSIS get_reference [options] referenceid [referenceid ...] Options: --pmid,-p referenceid is a pub med id. (Default) --bibtex,-b ouput in bibtex format (Default) --debug, -d debugging level (Default 0) --help,-h display this help --man,-m display manual =head1 OPTIONS =over =item B<--pmid, -p> The referenceid listed is a Pub Med ID. (Default) =item B<--bibtex, -b> Output the listed referenceid in BibTeX format. (Default) =item B<--help, -h> Display brief useage information. =item B<--man, -m> Display this manual. =back =head1 EXAMPLES get_reference -p -b -d 1 123456; get_reference 123456; =cut use vars qw($DEBUG); my %options = (pmid => 1, bibtex => 1, debug => 0, help => 0, man => 0, suggest_name => 0, ); GetOptions(\%options,'pmid|p','bibtex|b','suggest_name|suggest-name','debug|d','help|h','man|m'); pod2usage() if $options{help}; pod2usage({verbose=>2}) if $options{man}; $DEBUG = $options{debug}; if ($options{pmid} and $options{bibtex}) { use Reference::Type::Article; use Reference::Retrieve::PubMed; use Reference::Output::Bibtex; use Reference::Output::Filename; $Reference::Retrieve::PubMed::DEBUG = $options{debug}; foreach my $pmid (@ARGV) { next unless ($pmid) = $pmid =~ /(\d+)/; print STDERR "dealing with $pmid\n" if $DEBUG; my $reference = scalar Reference::Retrieve::PubMed::get_reference_by_pmid(pmid => $pmid); print STDERR "Unable to retrieve reference for $pmid\n" and next if not defined $reference; if ($options{suggest_name}) { # try to suggest a name for the reference print '%Filename: '.lc(filename($reference))."\n"; } print scalar bibtex($reference); } exit 0; }