require Net::SNMP; use Net::DNS; require Digest::MD5; use threads ('stack_size' => 131072); use threads::shared; use Thread::Queue; use Thread::Semaphore; use Data::Dump qw(dump pp); { ## thread entry point for (;;) { local %datahash; ..getdevicetopoll.. &ifpoll($dev); print FILE dump %datahash; } } sub ifpoll { my %devinfo; my %interfaces; ## etc... ..snmp a lot of data here.. %{$datahash{"devinfo"}} = %devinfo; %{$datahash{"interfaces"}} = %interfaces; return; }