No

Create the following package:

package SSHSentry; use strict; use warnings; sub new { my ($class, %params) = @_; my $self = bless {}, $class; foreach my $func (keys %params) { next unless $self->can($func); $self->$func($params{$func}); } return $self; } sub ssh_handle { my ($self, $handle) = @_; if (defined $handle and ref $handle eq 'Net::SSH') { # Assuming Ne +t::SSH is used for ssh handle. If not, change this. $self->{ssh_handle} = $handle; } return $self->{ssh_handle}; } sub DESTROY { my $self = shift; my $ssh = $self->ssh_handle() or return; $ssh->exit_session(); $ssh->close_session(); } 1;

Now inside your function, do something like this: my $sentry = SSHSentry->new(ssh_handle => $ssh); Once $sentry goes out of scope, DESTROY is called and your cleanup happens.

This type of package is convenient for wrapping around all sorts of stuff that can cause big problems if your code unexpectedly dies (semaphore control in a multi-threaded environment is a big one for this). In fact, it wouldn't surprise me if there is something a bit more thorough on CPAN.


In reply to Re^2: exiting a subroutine neatly by SimonPratt
in thread exiting a subroutine neatly by Mavebe

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.