<font style="font-family:courier new,monospace" face="courier new,monospace"><br></font><br style="font-family:courier new,monospace"><div style="font-family:courier new,monospace" class="gmail_quote">On Fri, Mar 30, 2012 at 3:31 PM, Zsbán Ambrus <span dir="ltr"><<a href="mailto:ambrus@math.bme.hu">ambrus@math.bme.hu</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">On 3/30/12, Fulko Hew <<a href="mailto:fulko.hew@gmail.com">fulko.hew@gmail.com</a>> wrote:<br>


> I tried that (I thought correctly, as per below) and I get an error rather<br>
> than my callback being called.<br>
><br>
> Not a GLOB reference at /usr/lib/perl5/site_perl/5.8.8/AnyEvent/Util.pm<br>
> line 592.<br>
<br>
I cannot reproduce your error.  Look, this works fine for me.<br></div></div></blockquote><div><br>... snip ...<br> <br></div><blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">

<div class="HOEnZb"><div class="h5">
If this works for you, try to interpolate between the two to find what<br>
breaks.  If a minimal example like this doesn't work for you, then I<br>
don't know what the problem could be.<br></div></div></blockquote><div><br>While waiting for further discussion on this list, I created and tested my<br>own sample (similar to yours) and found it to work.  I then went through<br>

the painstaking task of trying to isolate in my module, what might be<br>causing the 'Not a GLOB' problem.<br><br>I've narrowed it down (but still don't understand why) to 'signals'.<br>In my module, I record the end-user application's signals and<br>

insert my own handlers (to automate error recovery).<br><br>When I affect $SIG{}, I get the error.<br>I haven't yet been able to make a 'simple' test program that causes it,<br>but I see another thing that doesn't work for me.<br>

<br>The sample code is below.  That example also shows what I my originally<br>philosophy of what I was trying to do (to avoid having my app 'go away<br>for too long' (preventing the other AnyEvent socket handling from<br>

occurring.))<br><br>In it I've added a signal callback for __WARN__ so that cluck() is<br>called (so I get a better stack trace for debugging).  When installed<br>the AnyEvent way, cluck() never gets called.  (When I have similar code<br>

in my 'big module', It causes that GLOB error instead.)<br><br>It seems that AnyEvent's technique for signals doesn't (didn't)<br>take the perl'ish signals into account? (see answer to the 'which<br>

version' question below.)<br><br>I also seem to be having an interaction between AnyEvent's use of<br>CHLD and mine (perhaps I don't need it).  In general, I was using<br>the traditional $SIG{} handling approach for many things, and that<br>

is what appears to cause my GLOB issues [...but only when doing the run_cmd()].<br><br>I'll be investigating further, but I thought I'd throw these comments and<br>observations out to the list.<br> <br></div><blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">

<div class="HOEnZb"><div class="h5">
Try to make sure you're using the most recent version of the AnyEvent<br>
module, which is version 5.14 now.  Also, what version of perl are you<br>
using?  You might want to upgrade that too if it's too old.<br></div></div></blockquote><div><br>I've currently got AnyEvent 5.28 installed (because that's what I got<br>with Fedora8 (...yes I know its an old Fedora, but I have my reasons.))<br>

<br>------------ sample code ------------<br>#!/usr/bin/perl<br><br>use strict;<br>use warnings;<br>use Coro;<br>use AnyEvent;<br>use AnyEvent::Util;<br>use Carp;<br><br>my $buffer;<br>my $obtainer;<br><br>sub collector {<br>

    $buffer .= $_[0] if (scalar @_);<br>}<br><br>sub statsCollector {<br>    $buffer = '';<br>    my $collector = run_cmd "ps -ef", ">" => \&collector;   # run a command<br>    $collector->recv;                       # wait it to complete<br>

    foreach (split("\n", $buffer)) {        # process its data a line at a time in a<br>#       print scalar localtime(), " $_\n";  # loop so we can keep context info local<br>#       Coro::cede;                         # but let other stuff run too<br>

    }<br>my $x = undef;<br>print "$x\n" if ($x == 5);      # cause a warning for cluck to catch<br>}<br><br>sub user_setup { print "AgentX user_setup called\n"; }<br><br>sub clucker {<br>    print "clucker called\n";<br>

    Carp::cluck(@_);<br>    exit 0;<br>}<br><br>#$SIG{CHLD} = sub { print "got CHLD\n"; };<br>#my $w2 = AnyEvent->signal (signal => "CHLD", cb => sub { print "SIGCHLD happened\n"; exit 1 });<br>

<br>my $w1 = AnyEvent->signal (signal => "INT", cb => sub { print "SIGINT happened\n"; exit 1 });<br><br>#$SIG{__WARN__}  = \&clucker;<br>my $w = AnyEvent->signal (signal => "__WARN__", cb => \&clucker);<br>

<br>$obtainer = AnyEvent->timer(after => 1, interval => 5, cb => \&statsCollector);<br>AnyEvent->condvar->wait;<br><br></div></div>