I would quarrel with a couple of steps.
3. Storing the current line in '@array'.
The current line read from the file handle is completely ignored in the code given in the OP (which I admit is probably cut down from some real code). Instead, an element is 'popped' from the front of @array, i.e., its element 0 is removed (see shift), and this element is discarded.
4. Checking if array's first element is true.
4.1. If so, then exiting the block.
The block is exited via last unless element 0 of @array is true, i.e., if it is false. The pitfall of interpreting such double-negativity is a good reason to avoid conditionals based on unless, unless, IMHO, they are dead simple and in the statement modifier form:
last LINE unless some_condition();
See unless in Compound Statements and Statement Modifiers in perldocperlsyn.