in reply to DBI Frustrations

In addition to the comments above, it also appears that you're calling the prepare statement for every element of your loop. prepare() and execute() are designed for using placeholders, you then call prepare() once for each query and pass the variables to the execute(), that way the query gets cached and you're program is both more managable and faster. Here's an example using some of your code (I took it out of the sub though):
$addr = "select * from address_tbl where Subnet=?"; $subs = "select * from subnet_tbl where VLAN=?"; $addr_str = $dbh->prepare($addr); # prepare address select $subs_str = $dbh->prepare($subs); # prepare subnet select #sth is the statement handle from your original query while(@row = $sth->fetchrow_array()) { $addr_str->execute($row[0]); }

If you want the recursion I suggest to make hte queries and the prepared statement handle global then your sub just executes.