#!/usr/bin/perl use warnings; use strict; use IO::All; use WWW::Mechanize; { my @addrs = @ARGV; if ( scalar @addrs < 2 ) { print "You have " . scalar @addrs . " addresses. " . "Need 2 or more. Enter 'done' to finish\n"; while ( <> ) { last if $_ eq "done\n"; push @addrs, $_; } die help () if scalar @addrs < 2; chomp @addrs; } @addrs = process_addresses ( @addrs ); foreach ( 0 .. scalar @addrs - 2 ) { my $trip_leg_page = get_trip_leg_page ( [ $addrs[$_], $addrs[$_+1] ] ); io ( "trip_leg_" . ($_+1) . ".html" )->print ( $trip_leg_page ); } } sub process_addresses { my @addrs = @_; foreach ( @addrs ) { # Count commas, split the line into an anonymous # array w/ $count elems my $count = $_ =~ tr/,/,/; $_ = [ split ( /\s*,\s*/, $_, $count ) ]; # add a null if it's just city/state: unshift @$_, "" if 1 == $count; } return @addrs; } sub get_trip_leg_page { my ( $addr_pair ) = @_; my $mech = WWW::Mechanize->new (); $mech->get ( 'http://maps.yahoo.com/dd' ); my $resp = $mech->submit_form ( form_name => 'dd', fields => { addr => $addr_pair->[0][0], csz => $addr_pair->[0][1], taddr => $addr_pair->[1][0], tcsz => $addr_pair->[1][1], }, ); die "Form submission failure: $!" if not $mech->success (); return $resp->{_content} } sub help { print << " EOF"; usage: multimap "31 Kinnaird St, Cambridge, MA" \ "27 Hall St, Somerville, MA" \ "60 Garden St, Cambridge, MA" EOF }