An update on this for anyone interested in the original post. Replacing the line
LocalPort => $Net::UPnP::SSDP_PORT,
with the following line
PeerPort => $Net::UPnP::SSDP_PORT,
at the socket creation snippet fixed the issue.
The difference is that now the recv() command does not get the SSDP M-SEARCH message from itself as it used to but correctly gets the HTTP 200 OK reply from the router. I am not sure if the problem lied in the fact that 1900 port was bound through LocalPort being set or it is a problem of the IO select commands of the patch (any insights into this from more experienced Perl users are very very welcome).
Cheers,
Athanasia