James,
I appreciate your response. My familiarity w/ AnyEvent isn't too great and your response has helped greatly. What I ended up doing which I believe to look extremely ugly follows my comments. (again heavily modified)
To provide further details to hopefully paint a full picture .... I have two sources. One is from a command, and another is from a file. Both sources are pulled into an array and what I believe the below achieves is sending messages to the intersection of the arrays.
The below works with my limited testing and I appreciate the guidance thus far you've provided. I don't need further help unless of coarse you see something glaringly wrong, but until then, thanks James.
$muc->reg_cb(
message => sub {
my ( undef, undef, $msg ) = @_;
my @connected_users = ();
open my $fh, '-|', 'command_that_outputs_users' or die $!;
my $w; $w = AnyEvent->io(
fh => $fh,
poll => 'r',
cb => sub {
my $user = $fh->getline;
return if !defined($user);
chomp($user);
push(@connected_users, $user);
if(eof($fh)){
close($fh);
undef $w;
open($fh, "< $file") or die $!;
my $w2; $w2 = AnyEvent->io(
fh => $fh,
poll => 'r',
cb => sub {
my $user = $fh->getline;
return if !defined($user);
chomp($user);
if($user ~~ @connected_users){
AnyEvent::XMPP::IM::Message->new(
body => construct_body( $msg->body, $from ),
to => "$user\@" . HOST,
type => "chat",
)->send($conn);
close($fh);
undef $w2;
}
}
);
}
}
);
},
);
|