Whoa! That's a lot of code to examine, to help you find your problem. Can you trim it down a little? :)
At a guess, I would say that the error you are getting has to do with the fact that the $self->{-finish} value is not defined, and you are trying to evaluate it. Maybe check for its existence instead?
No good deed goes unpunished. -- (attributed to) Oscar Wilde
Here is the line it is complaining about:
return if $self->{-finish} != 0;
I kinda of knew the $self->(finish) was not getting defined. but im not sure why. the module should read standard out and when the cancel button is pressed should define $self->{finish} as 1 and kill the dialogbox.
My advice is first, check out what Perl's notion of "truth" is; robin wrote a very nice tutorial on truth (# What is truth? (Curiosity corner) by robin) on it on this site.
And then, as said by ptum, check to see if $self -> {-finish} is defined before comparing it to 0. Or try return if $self -> {-finish}, which may be adequate.