For C++/Java/C# coders two differences I stress very strongly up-front are that:
No 1: In Perl almost everything has a meaning, just not always what you want. Good examples include:
- Variable names without sigils don't stop execution - they are interpreted as barewords
- Try to store an array in a scalar and you get the length
- Try to store a hash in a scalar and you get 'a/b' (buckets in use vs total buckets?)
No 2: In Perl you can make it up as you go along. In other works you can say "in the hash 'w' the key 'x' indexes an anonymous array where box 'y' holds 'z'" and the interpreter will create and size all the variables for you as you go.