You won't be able to access progress data by using the put() method, since that's a one-shot method.
What you need to do is emulate what put() does. You can do that by using the
stor() method, and using the
write() method on the resulting Net::FTP::dataconn object.
I don't have a complete solution for you, but the following should get you started:
# advertise that we want to store a file.
# $filename should probably not contain a path
my $conn = $ftp->stor( $filename );
# open the local file
if( open my $fh, $filename ) {
my $buf;
while(my $read_bytes = read($fh, $buf, 1024) > 0) {
$conn->write($buf, $read_bytes);
# add your progressbar update here
}
}