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

use strict;
use warnings;
use Path::Class;
use Data::Dumper qw/Dumper/;
use WWW::Mechanize;

my $dir = file($0)->parent;
my $wsdls = $dir->file('wsdls.txt')->openw;

my $mech = WWW::Mechanize->new;
$mech->timeout(2);
$mech->get('http://www.xmethods.com/ve2/Directory.po');
my @links = $mech->links;

for my $link (@links) {
    next if $link->url_abs->as_string !~ m{/ve2/ViewListing[.]po.*[?]key=};
    my $url = $link->url_abs->as_string;
    $url =~ s/ViewListing[.]po.*[?]/ViewListing.po?/;

    eval { $mech->get($url) };
    warn $mech->uri . ': ' . $mech->res->code . ' ' . $mech->res->message . "\n" if $@;
    next if $@;

    my $wsdl = $mech->find_link(id => 'WSDLURL');
    die $mech->content if !$wsdl;
    next if !$wsdl;
    $wsdl = $wsdl->url_abs->as_string;
    print "$wsdl\n";
    eval { $mech->get($wsdl) };

    if ($@) {
        print {$wsdls} "#$wsdl\n";
    }
    else {
        print {$wsdls} "$wsdl\n";
    }
}