in reply to Re^2: Using Variable outside of loop with Net::SSH
in thread Using Variable outside of loop with Net::SSH

Doing $result=$_ inside the loop should work, but after the loop, $result will have the value of $_ from the last loop that executed. That might not be what you expected. I would test it by trying something like this:

my $result; while(<$chan>){ $result = $_; print "Inside loop: $result\n"; } print "Outside loop: $result\n";

That should show you what's being assigned in each loop, and the last inside loop should show the same value as what ends up outside it.

One other thing: if you have other code inside the loop which you've removed for the sake of this sample, make sure it's not changing the value of $_ before you assign it to $result.

Aaron B.
Available for small or large Perl jobs and *nix system administration; see my home node.

Replies are listed 'Best First'.
Re^4: Using Variable outside of loop with Net::SSH2
by Athanasius (Archbishop) on May 08, 2015 at 14:32 UTC
    if you have other code inside the loop which you've removed for the sake of this sample, make sure it's not changing the value of $_ before you assign it to $result

    Excellent point. So why not play it safe and dispense with $_ altogether?

    my $result; while ($result = <$chan>) { ... } # use $result

    Hope that helps,

    Athanasius <°(((><contra mundum Iustus alius egestas vitae, eros Piratica,

Re^4: Using Variable outside of loop with Net::SSH
by Nich240 (Initiate) on May 08, 2015 at 14:37 UTC
    Thanks Aaron: The problem is solved.

    In order to provide output to you, I changed the nas command that I was running. The original command had a lot of output, so I changed the command. Inside Loop and Outside Loop was exact. This is what I wanted, and exactly what you said. I changed back to the original nas command, and my Inside Loop was correct, but Outside Loop was empty.

    Apparently it may have something to do with the output of the command. I ran it again, with an output of 3 lines, and here is my result. Only the last line is passed down. My last line in the initial command was probably empty.
    Inside: 10 - slot_0 primary control station
    Inside: 5 - slot_2 contacted
    Inside: 5 - slot_3 contacted
    Outside: 5 - slot_3 contacted