diff options
author | Jesse Luehrs <doy@tozt.net> | 2012-02-25 13:55:37 -0600 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2012-02-25 13:55:37 -0600 |
commit | 5b8b7b3e5fd6aa57bfe2e41002d3bb352a7941fa (patch) | |
tree | 9740602a3b0e5c490963e12509d5398e056f643e | |
parent | 206d3c0589cc2bb8aac3831250145490eb1cd70b (diff) | |
download | term-filter-5b8b7b3e5fd6aa57bfe2e41002d3bb352a7941fa.tar.gz term-filter-5b8b7b3e5fd6aa57bfe2e41002d3bb352a7941fa.zip |
better handling of the scope guard
-rw-r--r-- | lib/Term/Filter.pm | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/lib/Term/Filter.pm b/lib/Term/Filter.pm index f7e8136..34be763 100644 --- a/lib/Term/Filter.pm +++ b/lib/Term/Filter.pm @@ -147,13 +147,17 @@ sub _setup { $prev_winch->(); }; - $self->_callback('setup', @cmd); - - return Scope::Guard->new(sub { + my $setup_called; + my $guard = Scope::Guard->new(sub { $SIG{WINCH} = $prev_winch; $self->_raw_mode(0); - $self->_callback('cleanup'); + $self->_callback('cleanup') if $setup_called; }); + + $self->_callback('setup', @cmd); + $setup_called = 1; + + return $guard; } sub _read_from_handle { |