Kurrija: Use of uninitialized value in split at...

Beitrag lesen

Beim ausführen des folgenden Codesnippets erhalte ich als Ausgabe:

  
200200235125  
Use of uninitialized value in split at dhcpd.conf.leases.cmp.pl line 208, <LEASES> line 34.  
Use of uninitialized value in print at dhcpd.conf.leases.cmp.pl line 209, <LEASES> line 34.  
Use of uninitialized value in print at dhcpd.conf.leases.cmp.pl line 209, <LEASES> line 34.  
Use of uninitialized value in print at dhcpd.conf.leases.cmp.pl line 209, <LEASES> line 34.  
Use of uninitialized value in print at dhcpd.conf.leases.cmp.pl line 209, <LEASES> line 34.  
  
Use of uninitialized value in split at dhcpd.conf.leases.cmp.pl line 210, <LEASES> line 34.  
Use of uninitialized value in numeric eq (==) at dhcpd.conf.leases.cmp.pl line 212, <LEASES> line 34.  

Das Codesnippet geht von Zeile 205 bis 216

  
for( $i = 0; $i < $dhcpd_sn_id; $i++ ) {  
	@range = split( /\ /, $dhcpd{$i}[2] );  
	@rangea = split( /\./, $range[0] );  
	print $rangea[0], $rangea[1], $rangea[2], $rangea[3], "\n";  
	@rangeb = split( /\./, $range[1] );  
	@temp_ip = split( /\./, $lease_ip );  
	if( $temp_ip[0] == $rangea[0] && $temp_ip[0] == $rangeb[0] && $temp_ip[1] == $rangea[1] && $temp_ip[1] == $rangeb[1] && $temp_ip[2] == $rangea[2] && $temp_ip[2] == $rangeb[2] && $temp_ip[3] >= $rangea[3] && $temp_ip[3] <= $rangeb[3] ) {  
		$lease_subnetrange = $i;  
		last;  
	}  
}  

Die Relevanten Variablen haben hierbei folgende Werte:

  
$i = 0; #da erster Durchlauf der Schleife  
$dhcpd{$i}[2] = "200.200.235.125 200.200.235.254";  
$lease_ip = "200.200.235.44";  

LEASES stellt in der Fehlermeldung das als letztes aktive Filehandle da, welches im zu lesenden Textfile gerade eben in Zeile 34 ist.
Ziel des Codesnippets ist es, zuerst die IP-Range aus $dhcpd{0}[2] in ihre Blöcke zu zerlegen, anschließend mit $lease_ip genauso zu verfahren und anschließend Vergleiche durchzuführen.
Bedingung für den if-Block ist, dass die ersten drei Blöcke aller IPs übereinstimmen und der 4.te Block von $lease_ip innerhalb der Range liegt, was es eben in diesem Snippet herauszufinden gilt.
Die print-Ausgabe war nur zum Testen von mir eingefügt worden, um zu sehen, ob die Array-Elemente wirklich nicht initialisiert sind.
Wird sie auskommentiert, so verschwinden lediglich die Fehlermeldungen zu "print".
Allerdings veranschaulicht meiner Ansicht nach die Ausgabe mit den Fehlern wie paradox dieser Fall ist.

Vielen Dank schoneinmal für etwaige Kommentare