I've checked the source. Such things cannot be implemented with goto. And setjmp()/longjmp() is best explanation found in pod.
Implementation done using eval EXPR (EXPR is a string) + goto RANDOM_label. Each time you call sub recursively - label is different!