using ls has some advantages.
That's why some use glob.
Doing it in pure Perl requires several lines
It would take more than 7 lines to do the equivalent of or die $! when using cat. It's so complex you probably don't even bother doing it.
The OP's code is the perfect example. By using cat,
- he used three lines instead of two,
- he removed the error checking he'd do with open,
- he introduced a lot of overhead in a loop,
- he introduced a bug that deletes trailing blank lines, and
- he introduced a bug for files with spaces and other special characters in their names.
Update: Added OP as an example.