Use the can method (it's a method of the UNIVERSAL package, so every class in Perl has access to it).
#!/usr/bin/perl
use strict;
use warnings;
package Communications;
sub SendMessage {
my $packages = shift;
my $msg = shift;
for (@$packages) {
if ($_->can('ReceiveMessage') ) {
$_->ReceiveMessage($msg);
}
else {
print "$_ can't ReceiveMessage\n"
}
}
}
sub ReceiveMessage {
print __PACKAGE__, "::ReceiveMessage('$_[1]')\n";
}
package Second;
sub ReceiveMessage {
print __PACKAGE__, "::ReceiveMessage('$_[1]')\n";
}
package Other;
sub nothing {
print "\n";
}
package main;
my @packages = qw(Communications Other Second);
Communications::SendMessage( \@packages, 'hello');
__END__
output:
Communications::ReceiveMessage('hello')
Other can't ReceiveMessage
Second::ReceiveMessage('hello')