Nearly all modern programming languages have signatures, so you might say:
nothing special, move along. But there are two features that make them more useful
than signatures in other languages.

The first is multi dispatch, which allows you to write several
routines with the name, but with different signatures. While extremely
powerful and helpful, I don't want to dwell on them. Look at Chapter 6 of
the "Using
Perl 6" book for more details.

The second feature is sub-signatures. It allows you to write a
signature for a sigle parameter.

Which sounds pretty boring at first, but for example it
allows you to do declarative validation of data structures. Perl 6 has no
built-in type for an array where each slot must be of a specific but different
type. But you can still check for that in a sub-signature

Here we have a parameter called @array, and it is followed by
a square brackets, which introduce a sub-signature for an array. When calling
the function, the array is checked against the signature (Int,
Str), and so if the array doesn't contain of exactly one Int and one
Str in this order, a type error is thrown.

The same mechanism can be used not only for validation, but also for
unpacking, which means extracting some parts of the data structure.
This simply works by using variables in the inner signature: