Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw
 
PerlMonks  

Re: Using Variable outside of loop with Net::SSH

by aaron_baugher (Curate)
on May 08, 2015 at 13:30 UTC ( [id://1126090]=note: print w/replies, xml ) Need Help??


in reply to Using Variable outside of loop with Net::SSH

You can't get at the loop's inner value of $_ outside the loop, because the while command automatically localizes it. Just do it the way you do here with $result, by assigning it to a variable that does exist outside the loop.

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

Replies are listed 'Best First'.
Re^2: Using Variable outside of loop with Net::SSH
by Nich240 (Initiate) on May 08, 2015 at 13:40 UTC
    I understand that $_ is local. This is why I assign it to the $results variable. That variable is global. The strange part is that $result="test" will work outside the loop. To me, this would seem that since $result is initialized with "my" before the loop, I can use it inside out outside the loop. And, this works for almost all variables, $results="test" is good. So it seems to be correct. However, the problem is when I use $result=$_

      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.

        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,

        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

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others avoiding work at the Monastery: (2)
As of 2024-04-26 04:11 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found