I just want to check that there is no need to explicitly check "if the list has at least one element" since presumably evaluating the list (by grep) will determine if it is empty or not.

Right, no need for an explicit check. Arrays in scalar context evaluate to the number of elements, so only empty arrays are false in boolean context.

The stateful carry over part seems to be weird if not buggy.

Well,

glob</b> needs to carry state for this useful idiom to work:
<code>
while (my $file = glob '*.txt') {
# do something with $file
}
</code>
<p>Which is more friendly to memory than using a list and iterating th+at.</p>
<p>But one could argue that <c>glob