use warnings; use 5.014; use strict; sub first_allzero_row_a { my($a) = @_; my($r, $q, $c, $f, $o); $o = -1; $r = 0; $q = 0; while (!$q && $r < @$a) { $c = 0; $f = 0; while (!$f && $c < @{$$a[$r]}) { if (0 != ${$$a[$r]}[$c]) { $f = 1; } else { $c++; } } if (!$f) { $q = 1; $o = $r; } else { $r++; } } $o; } sub first_allzero_row_b { my($a) = @_; my($r, $q, $o); $o = -1; $r = 0; $q = 0; while (!$q && $r < @$a) { if (is_allzero($$a[$r])) { $q = 1; $o = $r; } else { $r++; } } $o; } sub is_allzero { my($a) = @_; my($c, $f); $c = 0; $f = 0; while (!$f && $c < @$a) { if (0 != $$a[$c]) { $f = 1; } else { $c++; } } !$f; }