or is too low precedence

Line 86 doesn't do what you hope it does. :-)  the low-precedence 'or' means that Perl sees the line as 

```
return( ... ) or die ...
```

which means it'll always return, even if `listen` returns a false value.