Anhand des von Dir geposteten Codes kann ich nicht vorhersagen, welchen Wert die Bedingungen
$i <= $max_i - 1 in Zeile 31 und
$zeile eq $tag_a[$i] in Zeile 33 annehmen werden, denn nichts deutet daraufhin, welchen Wert die Variablen
$max_i,
$zeile und
@tag_a an diesen Stellen im Code haben.
Wenn Du beobachtest, dass
$plus gleich Null ist, liegt natürlich die Vermutung nahe, dass die Schleifenabbruchbedingungen nicht so funktionieren wie Du denkst und dass der Code ungeplant in Zeile 29 vorbeikommt.
When C++ is your hammer, every problem looks like your thumb.