This is just rewriting your code with a basic few improvements, just to make it easier to work with. Note - your SQL statement is still borked.
sub getips {
my ( $j, $vlan ) = @_;
my $name = "ips" . $j;
my ($sth, $dbh, %ips, $i, @iparray);
my $dbh = DBI->connect('DBI:ODBC:Servers', { RaiseError => 1, Auto
+Commit => 0 });
my $sth = $dbh->prepare( <<__END_SQL__ );
SELECT IPs.octet1
,IPs.octet2
,IPs.octet3
,IPs.octet4
FROM IPs LEFT OUTER JOIN StaticIPs
ON IPs.Octet1 = StaticIPs.octet1
AND IPs.Octet2 = StaticIPs.octet2
AND IPs.Octet3 = StaticIPs.octet3
AND IPs.Octet4 = StaticIPs.octet4
WHERE StaticIPs.octet1 IS NULL
AND IPs.VLAN = ?
__END_SQL__
$sth->execute( $vlan );
my @ips;
$sth->bind_columns( \( $ips[0], $ips[1], $ips[2], $ips[3] ) );
$sth->{'ChopBlanks'} = 1;
my @iparray;
while ($sth->fetch) {
next unless $ips[0];
push @iparray, join '.', @ips;
}
$sth->finish();
$dbh->disconnect();
print scrolling_list(
-class => 'df',
-name => $name,
-size => 1,
-values => [@iparray],
-default => $iparray[-1]
);
}
- In general, if you think something isn't in Perl, try it out, because it usually is. :-)
- "What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against?"