As joligario already said, it won't work without using the correct operators. If you aren't going to quote the numbers in your $signal comparison, then don't use "eq".
I would suggest changing your shout lines all to be like this:
Code:
quest::shout("I got signal $signal (expulser)!");
That will tell you if they got the actual signal you expected. In the case of your script, I suspect you will see all of the signals come in, but fall into the same if statements due to your incorrect operator use.
Also, I find elsif a bit flaky sometimes, unless there is an else at the end of it (even if the else has nothing in it). You might try switching those all to if instead of elsif and see if that makes any difference.