The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/local/bin/perl

package main;

use strict;
use warnings;

use Astro::SIMBAD::Client;
use Data::Dumper;
use File::Basename;
use Getopt::Long;

$Data::Dumper::Terse = 1;

my $usage = <<eod;

Query SIMBAD 4 for the objects on the command line. The result is given
as comma-separated values.

usage: @{[basename $0]} [options] object ...

where the options are
  -help
    displays this text;
  -parse
    invokes a simple parser, and displays the result with Data::Dumper.

eod

my %opt;

(GetOptions (\%opt, qw{parse},
	help => sub {print $usage; exit},
    ) && @ARGV) or die $usage;

my $simbad = Astro::SIMBAD::Client->new (
    type => 'txt',
    format => {txt => <<'eod'},
%idlist(NAME|1),%coord(d;A),%coord(d;D),%plx(V),
%pm(A),%pm(D),%rv(V)\n
eod
    parser => {txt => $opt{parse} ? 'parse_csv' : ''},
);

my @rslt;
foreach my $obj (@ARGV) {
    eval {
	push @rslt, $simbad->query (id => $obj);
	1;
    } or print ( $@ || 'An unknown error occurred' );
}

print $opt{parse} ? Dumper (\@rslt) : @rslt;

sub parse_csv {
    my $line = shift;
    my @data;
    foreach (split '\n', $line) {
	push @data, [split '\s*,\s*', $_];
    }
    return wantarray ? @data : \@data;
}

__END__

=head1 TITLE

csv - Download SIMBAD data in CSV format

=head1 SYNOPSIS

 csv Arcturus >arcturus.csv
 csv -help

=head1 OPTIONS

=over

=item -help

This option displays documentation and then exits.

=item -parse

This option causes a display of the raw data in
L<Data::Dumper|Data::Dumper> format, rather than as CSV.

=back

=head1 DETAILS

This script takes as its arguments the names of objects to be looked up
in the SIMBAD database, and copies the obtained information to standard
output as comma-separated values, one line per object. The individual
fields are:

 object name
 right ascension (in decimal degrees)
 declination (in decimal degrees)
 distance
 proper motion in right ascension
 proper motion in declination
 velocity in recession

=head1 AUTHOR

Thomas R. Wyant, III F<wyant at cpan dot org>

=head1 COPYRIGHT AND LICENSE

Copyright (C) 2006, 2008, 2010-2012 by Thomas R. Wyant, III

This program is free software; you can redistribute it and/or modify it
under the same terms as Perl 5.10.0. For more details, see the full text
of the licenses in the directory LICENSES.

This program is distributed in the hope that it will be useful, but
without any warranty; without even the implied warranty of
merchantability or fitness for a particular purpose.

# ex: set textwidth=72 :