They tell you the type of the variable (hash, scalar, array), a little bit like hungarian notation, but enforced by the compiler
They keep your variables from clashing with reserved words, making it possible to safely add reserved words later without breaking existing code (or at least without interfering with variables in existing code).