Switch is hardly comparable to a native implementation.
From the docs
There are undoubtedly serious bugs lurking somewhere in code this funky :-) Bug reports and other feedback are most welcome.
Due to the heuristic nature of Switch.pm's source parsing, the presence of regexes specified with raw ?...? delimiters may cause mysterious errors. The workaround is to use m?...? instead.
Due to the way source filters work in Perl, you can't use Switch inside an string eval.
If your source file is longer then 1 million characters and you have a switch statement that crosses the 1 million (or 2 million, etc.) character boundary you will get mysterious errors. The workaround is to use smaller source files.
Not the kind of things you'd like to deal with when you are coding in a hurry ...