Without delving too deep, this code looks to me like it will probably do as expected. The basic idea seems ok, and without actually testing it, it looks like things should work. Again, I haven't looked at it in depth, so there might be bugs lurking I didn't notice.
I would like to make a style suggestion, though: use some whitespace! Your code is very bunched up, not only horizontally, but also vertically. Unless you're trying to make it look intentionally dense and obfuish (is this even a word?), I would avoid writing code like this. It generally hurts readability. I think some carefully placed blank lines would do wonders in this case,
and a few extra spaces between some operators would be nice as well [upon further inspection, there seems to be fairly good use of spacing. It's just the lack \n's that caught my attention].
(Another very minor niggle is the use of $Pid as a global. It's pretty easy to trace where it comes from in this case, but it would be just as easy to pass this around to the various subs as necessary, and would probably help some poor schmuck trying to understand the code a few months from now.)