The caseof...case... construct (which was bastartized into the switch...case... construct by K&R) can generally only be used to compare fixed constant values against the target expression. If()...elseif()...else constructs are much more flexible, and can be (mis)used to perform comparisons if several unrelated conditions all witint he same construct.
Not knowing Perl, I don't know whether their given... construct would be restricted to comparisons of constants vs. an expression, or expressions against an expression. One could argue that, if it's the latter, its not a real case statement, but merely the god(s) of Perl showing off.