Re: Getting error in Net::SFTP with get function
- From: tom@xxxxxxxxxxxxxx (Tom Phoenix)
- Date: Wed, 31 Oct 2007 11:21:35 -0700
On 10/31/07, Jay Savage <daggerquill@xxxxxxxxx> wrote:
it looks to me like OP is calling $sftp->get() in a void
context:
$sftp->get( $file, $localFile ) || warn("errrrr0rrrrr_--->
$!".$sftp->status."\n");
It may seem that way, but the left side of the logical or operator
isn't a void context, even if the operator itself is used in a void
context. That's actually a Boolean context (which is to say a scalar
context), no matter how the operator is used. That's because the left
side must be evaluated as true or false to determine whether the right
side will be evaluated, even if the whole thing is used in a void
context. Here comes the code:
#!/usr/bin/perl
use warnings;
use strict;
sub my_context {
my $wa = wantarray ? "list" : "scalar";
$wa = "void" unless defined wantarray;
my $line = (caller)[2];
print "Called in $wa context at line $line.\n";
$wa;
}
print "Testing scalar and list context:\n";
my $scalar = &my_context();
my($list) = &my_context();
print "Scalar: $scalar\nList: $list\n\n";
print "Testing left side of ||-or in scalar context:\n";
my $left_of_or = &my_context() || "0 but true";
print "Left of ||-or: $left_of_or\n\n";
print "Testing left side of ||-or in list context:\n";
my($list_left_of_or) = &my_context() || "0 but true";
print "List left of ||-or: $left_of_or\n\n";
print "Testing left side of ||-or in void context:\n";
&my_context() || die "no context";
print "\n";
print "Testing true void context:\n";
&my_context();
print "\n";
At least I'm not aware that that '||' forces any particular context on
the lefthand operand. Perlop mentions propagating context WRT the
righthand operand, but doesn't say anything about the left.
The docs could always be more clear. The right operand of an
or-operator does inherit the context of the operator itself. But the
left operand's context is always Boolean.
Given that, I would expect, from the docs, for get() to return the
empty string on success
Where did you get that? From what I read of the docs, get() should
return the downloaded file contents on success. "If get is called in a
non-void context, returns the contents..."
http://search.cpan.org/~dbrobins/Net-SFTP-0.10/lib/Net/SFTP.pm
Of course, the contents of a file could be the empty string or another
false value, so it would be appropriate to use defined() to test for
success.
Cheers!
--Tom Phoenix
Stonehenge Perl Training
.
- References:
- Getting error in Net::SFTP with get function
- From: Kilaru Rajeev
- Re: Getting error in Net::SFTP with get function
- From: Jay Savage
- Re: Getting error in Net::SFTP with get function
- From: Tom Phoenix
- Re: Getting error in Net::SFTP with get function
- From: Jay Savage
- Getting error in Net::SFTP with get function
- Prev by Date: Re: Getting error in Net::SFTP with get function
- Next by Date: Need help with substitution
- Previous by thread: Re: Getting error in Net::SFTP with get function
- Next by thread: Re: Getting error in Net::SFTP with get function
- Index(es):
Relevant Pages
|