I guess we are talking about array slices in scalar context. Only in scalar context the array slices return last element. And this is the biggest difference between array slices and arrays. The arrays return the number of elements.
I guess in this situation, there's no bug. The ~~ operator works with arrays, not with lists, and array slice is the list. Unfortunately perl documentation does not cover the case of using list as the argument for smart match. But looking at the functionality it is clear, that operator works in scalar context with the objects that are passed to it. As result, the list of scalars always returns the last scalar.