I suspect your problem is your GetFiles() sub. From what I understand from the module docs, the ParseSub argument is meant to provide an alternative parser for directory listing output. Since you are not parsing the directory listing output then DO NOT include the ParseSub argument.
I see a commented out line specifying MatchFiles.
$ftp->rget( FlattenTree => 1,
MatchFiles => qr/\.txt/,
What happens when you use this?
Also, that pattern would be more correct if you anchor the the end of the file name.
MatchFiles => qr/\.txt$/,