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

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=$_
  • Comment on Re^2: Using Variable outside of loop with Net::SSH

Replies are listed 'Best First'.
Re^3: Using Variable outside of loop with Net::SSH
by aaron_baugher (Curate) on May 08, 2015 at 13:55 UTC

    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