in reply to binding to a vhost using LWP

This is doable. For LWP::UserAgent, the actual socket is in HTTP::Protocol and its subclasses. Those classes accept extra socket configuration from global @EXTRA_SOCK_OPTS. That’s where you can set LocalAddr and LocalPort.

Just do something like this: (code is tested.)
#!/usr/bin/perl use LWP::UserAgent; use strict; push(@LWP::Protocol::http::EXTRA_SOCK_OPTS, "LocalPort" => "7000"); my $a = new LWP::UserAgent(); $a->proxy('http', 'http://ofgfw1.owfg.com:8080/'); $a->get("http://www.yahoo.com/");
When I was testing, I added extra code in LWP::Protocol::http.pm after the socket is created, to make sure the local binding is correct:
print $sock->sockaddr(), "\n"; print $sock->sockport(), "\n";
And this passed.