Beefy Boxes and Bandwidth Generously Provided by pair Networks
good chemistry is complicated,
and a little bit messy -LW

Re^6: Perl sftp behavior when there are no files in the share

by Bindo (Acolyte)
on Mar 27, 2013 at 15:29 UTC ( #1025744=note: print w/ replies, xml ) Need Help??

in reply to Re^5: Perl sftp behavior when there are no files in the share
in thread Perl sftp behavior when there are no files in the share

Thank you very much again sir. Mr soonix beleive it or not Im a beginner in the world of perl. I too saw the context callback and I couldnt understand a thing. In fact net:sftp foreign is the firs ever cspan module I used in my scripting. Could you please be good enough to modify my code without complicating it too much (cos im a beginner :) so that I could grasp the idea of it? Please sir.

Comment on Re^6: Perl sftp behavior when there are no files in the share
Re^7: Perl sftp behavior when there are no files in the share
by soonix (Curate) on Mar 27, 2013 at 18:41 UTC

    This is untested, because I haven't yet figured out how to use cpan with the perl interpreter on my smartphone :-)

    First you need the callback routine, like this:

    sub show_progress { my($sftp, $data, $offset, $size) = @_; print "downloaded $offset of $size bytes\r"; }
    The \r positions the cursor to the beginning of the line, so that the next print overwrites it.

    Then you change

    $sftp->get($REM_FILE, callback => \&show_progress)
    That should do the trick...

      Thank you again sir. I tried but it gives me this error.

      Odd number of elements in hash assignment at /usr/lib/perl5/site_perl/ +5.10.0/Net/SFTP/ line 1432. Invalid option 'CODE(0xa53608)' or bad combination of options at ./gtp line 66

      Any thoughts sir? Also what would be the easiest way to get what I want without using CSPAN stuff? As in that simple progresss shown when you download the file manually? Many thanks in advance sir.

        It seems there is a small error in the code by soonix. The Net::SFTP::Foreign documentation says that ->get takes the local name of the file as second parameter and the rest are options. So if you want to display the progress, you'll also have to provide the local name, for example like this:

        ... use File::Basename; my $local_name= basename( $REM_FILE ); warn "Saving '$REM_FILE' to '$local_name'"; $sftp->get($REM_FILE, $local_name, callback => \&show_progress) ...

        This is actually two replies in one. First, thanks (and ++) to Corion for pointing out the mistake in my solution above.

        Now Bindo, your question for a solution without CPAN... I think doing SFTP in pure Perl, while possible, would be difficult and error-prone. If you just don't want any additional CPAN modules, that's another question:

        As far as I see, your $REM_FILE already is a file name without directory, so you don't need the basename function and module, and can simply

        $sftp->get($REM_FILE, $REM_FILE, callback => \&show_progress)
        Perhaps that already does what you want.

        Update: second parameter in get corrected

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1025744]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others meditating upon the Monastery: (6)
As of 2014-10-01 21:58 GMT
Find Nodes?
    Voting Booth?

    What is your favourite meta-syntactic variable name?

    Results (40 votes), past polls