in reply to Creating queues for multiple threads on connection of TCP client

Presumably you were trying to use a symbolic global so that your thread could gain access to the queue handle by doing the same?

That isn't going to work. Besides that you have the syntax for the symbolic variable instantiation worng, each thread gets its own copy of globals anyway, so tehy would be different entities with the same name.

But you don't need to do that anyway. Just create the Q before you start the threads, and instead of passing the queue number (your $j) to the thread, pass the queue handle itself:

my $Q = Thread::Queue->new; my $Thread = threads->create( "restoreserver", $new, $Q);

If you also need access to the queues from the code that calls PortListener(), (and don't want to return the queue handle from the sub), then also assign the handle to a global array:

our @queues; push @queues, Thread::Queue->new; my $Thread = threads->create( "restoreserver", $new, $queues[ -1 ] + );

Now everone has access without needing to use symbolic variables.


Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.
RIP PCW It is as I've been saying!(Audio until 20090817)