but when I print, it prints the files that have a file size of zero as well (prints all the files).
Of course it does print all files, since you print the elements of @files, not @newfiles.
But then, the array @newfiles would contain zero length elements, since you add $file1 to the array in a convoluted way (see push), which at that point is undefined.
to the top of this code snippet's scope would catch that (and force you to declare the variables you use).
See strict, warnings