The former is a scalar value, the latter an array slice, which makes it a
list with one (scalar) value. You should use $ when you want a scalar value
(most of the time) and @ when you want a list with one scalar value in it
(very, very rarely; nearly never, in fact).

Sometimes it doesn't make a difference, but sometimes it does. For example,
compare:

When putting a smiley right before a closing parenthesis, do you:

Use two parentheses: (Like this: :) )
Use one parenthesis: (Like this: :)
Reverse direction of the smiley: (Like this: (: )
Use angle/square brackets instead of parentheses
Use C-style commenting to set the smiley off from the closing parenthesis
Make the smiley a dunce: (:>
I disapprove of emoticons
Other