Listing 1: A sample stock ticker program using Finance::Quote
Finance::Quote
The Perl Journal, Fall 2000
 

.

#!/usr/bin/perl -w
#
# Example stock-ticker program.  Can look up stocks from multiple
# markets and return the results in local currency.

use strict;
use Finance::Quote;

my $CURRENCY = "AUD";   # Set preferred currency here, or empty string for
                                # no conversion.

# The @stocks array contains a set of array-references.  Each reference
# has the market as the first element, and a set of stocks thereafter.

my @STOCKS = ([qw/australia CML ITE BHP/],
                 [qw/usa MSFT RHAT LNUX/]
             );

# These define the format.  The first item in each pair is the label,
# the second is the printf-style formatting, the third is the width
# of the field (used in printing headers).

my @labels = (["name",  "%12s",  15],
                 ["date",  "%11s",  11], 
                 ["time",  "%10s",  11],
                 ["last",  "%8.2f",  8],
                 ["high",  "%8.2f",  8], 
                 ["low",   "%8.2f",  8],
                 ["close", "%8.2f",  8], 
                 ["volume","%10d",  10]);

my $REFRESH = 120;      # Seconds between refresh.

# -- END CONFIG SECTION --

my $quoter = Finance::Quote->new();
my $clear  = `clear`;                   # To clear the screen.

# Build our header.

my $header = "\t\t\t\tSTOCK REPORT" .($CURRENCY ? " ($CURRENCY)" : "") ."\n\n";

foreach my $tuple (@labels) {
    my ($name, undef, $width) = @$tuple;
    $header .= sprintf("%".$width."s", uc($name));
}

$header .= "\n".("-"x79)."\n";

# Header is all built.  Looks beautiful.

$quoter->set_currency($CURRENCY) if $CURRENCY;       # Set default currency.

for (;;) {      # Loop forever.
    print $clear, $header;
    foreach my $stockset (@STOCKS) {
        my ($exchange, @symbols) = @$stockset;
        my %info = $quoter->fetch($exchange, @symbols);

        foreach my $symbol (@symbols) {
            next unless $info{$symbol, "success"};  # Skip failures.
            foreach my $tuple (@labels) {
                my ($label, $format) = @$tuple;
                printf $format, $info{$symbol, $label};
            }
            print "\n";
        }
    }

    sleep($REFRESH);
}