just a small comment about /goto being considered bad practice. is it not worse practice to steer clear of a certain feature entirely without being aware of its good and bad points?
/goto is generally considered inadvisable because you will, invariably, find people (usually beginners) that will use it at every turn in place of constructs such as nested if/else statements which are much clearer and, consequently, more maintainable. to immediately consider /goto as a quick and easy fix rather than restructuring your code is, admittedly, bad practice; but that's not really an issue here.
here we're seeing /goto being used analogous to switch/case in other languages, which most certainly isn't surrounded by stigma, and is in this instance a very clear and easy method to follow and maintain. i've used and have seen /goto used very elegantly in mirc ;P