The doc's for Net::FTP say that ftp ls and ftp dir are not the same. This is not the normal command line.
From Net::FTP:
-
ls ( DIR )
Get a directory listing of DIR , or the current directory.
In an array context, returns a list of lines returned from the server. In a scalar context, returns a reference to a list.
-
dir ( DIR )
Get a directory listing of DIR , or the current directory in long format.
In an array context, returns a list of lines returned from the server. In a scalar context, returns a reference to a list.
Also note that du stats are not the same as ls stats. "du" is the size actually used on the disk. That will be at least equal to but, probably greater than the actual size of the file. That is because the file system writes to the disk in a quantum size of bytes, often 4096 bytes. Could be that the last byte of the file takes up one byte of this 4096 bytes. Other minimum "block" sizes to write to the disk are possible and there are a variety of names for what the file system calls this "minimum file system block size" on the disk.