sunnyfedora99 has asked for the wisdom of the Perl Monks concerning the following question:

Hi PerlMonks, I have the following code which gets a list of the '$dir' using Net::FTP.

my $ls; @{$ls} = $ftp->dir(); if (!@{$ls}) { print "Unable to list files in ftp://$host/$dir\n"; logError ("Unable to list files in ftp://$host/$dir"); return undef; } print Dumper($ls);

this produces the following output using Dumper

$VAR1 = [ '-rw------- 1 ftp ftp 4037 Oct 04 16:15 1.j +pg', '-rw------- 1 ftp ftp 10209 Oct 04 16:15 2.p +ng', '-rw------- 1 ftp ftp 1314 Oct 03 10:59 3.g +if' ];

I want the same output when I try getting the list of '$dir' when using the Net::SFTP::Foreign method. I can't seem to get it working. I've tried the following.

my $ls; $ls = $sftp->ls() or die "unable to retrieve directory: ".$sftp->error; if (!$ls) { print "Unable to list files in sftp://$host/$dir\n"; logError ("Unable to list files in sftp://$host/$dir"); return undef; } $ls = $_->{longname} for @$ls; print Dumper($ls);

Output is...

$VAR1 = [ 'drwx--S--- 2 pgpftp pgpftp 4096 Oct 5 11:06 .' ];

this should be showing something like the following

$VAR1 = [ 'drwx--S--- 2 pgpftp pgpftp 4096 Oct 5 11:06 tst1 +.jpg', 'drwx--S--- 2 pgpftp pgpftp 4096 Oct 5 11:06 tst2 +.jpg', 'drwx--S--- 2 pgpftp pgpftp 4096 Oct 5 11:06 tst3 +.jpg' ];

Anyone, any ideas where i'm screwing up

Cheers!

Replies are listed 'Best First'.
Re: Net::SFTP listing problem
by salva (Canon) on Oct 05, 2011 at 13:46 UTC
    my $ls = $sftp->ls or die "unable to retrieve directory: " . $sftp->er +ror; my @long = map $_->{longname}, @$ls; print Dumper(\@long);

      How can I make it  return $long instead of  return @long. I call the $long variable in another sub

        my $long = [ map $_->{longname}, @$ls ]; print Dumper($long);

        No worries, I got it. Just wrapped it in Square brackets.

        cheers