thanks for the reply. The socket is associated with the right NIC. From the results of "netstat -g", if can see the sockets bind to the correct NICs. I don't think "Proto => 'udp'" matters here as it is udp by default for the IO::Socket::Multicast constructor. By using tcpdump, I can see the traffic I expected, i.e. if one path is having issue, no results from tcpdump. But the recv call stills get the data from another NIC that is getting mcast packets!
I suspect this is an issue with "sockets" as I have another multicast client "mdump"(written in C, https://community.informatica.com/solutions/1470) behaves the same way!