Ich hoffe, du findest die Antwort noch nach dem ganzen Gequassel über Tags ;-)
Da kann ich noch immer nicht folgen. Wahrscheinlich verstehe ich es falsch. Ich schildere mal meinen Denkweg: Ich könnte in
$aeine Eingabe192.168.0.0/24haben. Die Subnetzmaske dazu wäre255.255.255.0. Wenn ich das mit192.168.0.0UND-verknüpfe, bleibe ich bei192.168.0.0als Eintrag in$a2. Das wäre aber der gleiche Wert wie für192.168.0.0/16. Wenn ich in$bdann eine IP192.168.255.20habe, würde mir die für192.168.0.0/24fälschlicherweise als Treffer in$a2ausgewertet, obwohl sie nur für192.168.0.0/16ein Treffer wäre.
Da Du die Aufgabe so definiert hast, dass ein Eintrag von $a2 Teilmenge eines anderen Eintrags sein kann, ist mein Hinweis auf Präfixfreiheit obsolet.
Andererseits - wenn dein $a Array 192.168.0.0/24 UND 192.168.0.0/16 enthält - und es Dir nur auf Treffer ankommt, nicht aber darauf, welcher Eintrag aus $a getroffen wurde, dann kannst Du im Vorverarbeitungsschritt den Eintrag 192.168.0.0/24 auch löschen. Der ist dann redundant. Falls es Dir aber AUCH darauf ankommt, ob Du den /24 oder den /16 Eintrag getroffen hast, dann musst Du sicherstellen, dass Du die längeren Präfixe zuerst testet. Tust Du das?
Rolf