in reply to falling through cases?

You mentione extreme cases (Duff's Device, which is more about jumping into a looping construct), and some lesser used ones, but you fail to mention the prime reason there's a fall through with cases in C:
case FOO: case BAR: /* code here */ break;

That is, having more values map to the same code.

How to do that efficiently in Perl? It depends. Sometimes a computed goto is the best way, sometimes a series of if statements. Both have the disadvantage they potentially spend a lot of time finding the code that needs to be executed. And depending on the values of the cases, and in which order they are, you could use an array of code references, and execute each code reference from the switched value to the end.

Abigail