If you fork() for every file, you can use a hash to store the information. This doesn't include all of the SFTP stuff, but hopefully its enough to give you an idea you can merge in with the callback sub feature of Net::SFTP::Foreign.
use warnings;
use strict;
use Data::Dumper;
use Parallel::ForkManager;
my @files = qw(one.txt two.txt);
my %info;
my $pm = Parallel::ForkManager->new;
FILE:
for my $file (@files){
$pm->start and next FILE;
$info{$file}{size} = -s $file;
$pm->finish;
}
$pm->wait_all_children;
print Dumper \%info;
__END__
$VAR1 = {
'two.txt' => {
'size' => 21
},
'one.txt' => {
'size' => 30
}
};
Then you can process the collected data after all the workers have finished.