I continue to improve my terminal use.perl reader. I needed a bit to fetch a single entry. It is my previous script which the looping stuff cut out and a command line argument added. Of course, this should be a module, but I don't want to write another module at the moment. Let someone else do that.
#!/usr/bin/perl -w
use strict;
=head1 NAME
use_journal - get a single entry from a use.perl journal
=head1 SYNOPSIS
% use_journal ID
=head1 DESCRIPTION
This script fetches a single journal entry by its entry ID.
I wrote it so other programs could shell out to it to fetch
an entry.
=head1 AUTHOR
brian d foy, E<lt>bdfoy@cpan.orgE<gt>
=head1 COPYRIGHT
Copyright 2002, brian d foy, All rights reserved.
You may use this script under the same terms as Perl itself
=cut
use File::Spec::Functions;
use SOAP::Lite;
use Text::Template;
my $id = $ARGV[0];
die "The entry ID must be a string on digits only\n" if $id =~ m/\D/;
my $Debug = $ENV{USE_PERL_JOURNAL_DEBUG} || 0;
my $Template = $ENV{USE_PERL_JOURNAL_TEMPLATE} ||
catfile( $ENV{HOME}, ".journal.tmpl" );
die "Could not open template file\n" unless -r $Template;
my $host = 'use.perl.org';
my $uri = "http://$host/Slash/Journal/SOAP";
my $proxy = "http://$host/journal.pl";
my $journal = SOAP::Lite->uri( $uri )->proxy( $proxy );
my $template = Text::Template->new( SOURCE => $Template );
my $hash = $journal->get_entry( $id )->result;
die "No journal entry for $id\n" unless $hash;
print $template->fill_in( HASH => { entry => $hash } );