#!/usr/bin/perl -w use strict; use threads; use threads::shared; use Thread::Queue; my $q = new Thread::Queue; # create empty threaded queue my $threadcount = 10; # amount of threads my @SNMPthreads; # thread tracker my @firmware : shared; open (FH, 'filename.txt'); while () { chomp; $q->enqueue($_); } close FH; foreach my $i (1..$threadcount) { push @SNMPthreads, threads->new(\&SNMPthread, $i ); } foreach my $i (0..$#SNMPthreads) { my $retval = $SNMPthreads[$i]->join(); } open (WH, ">firmware.txt"); print WH "-->$_\n" foreach @firmware; close WH; sub SNMPthread { my $thread = shift; while ( $q->pending && $q->pending > 0) { my $left = $q->pending; my $ip = $q->dequeue; push @firmware, "$$: $thread, $left, $ip"; my $retval = `/usr/bin/snmpget -v1 -c $ip sysDescr.0`; chomp $retval; $retval =~ s/\>\>//g; my @ele = split(/\;/, $retval); print "$ip, $ele[ ($#ele-1) ], $ele[ $#ele ]\n"; } print "thread $thread finished\n"; }