What are all these $@%* punctuation signs, and how do I know when to use them?

They are type specifiers, as detailed in the perldata manpage:

    $ for scalar values (number, string or reference)
    @ for arrays
    % for hashes (associative arrays)
    * for all types of that symbol name.  In version 4 you used them like
      pointers, but in modern perls you can just use references.

While there are a few places where you don't actually need these type specifiers, except for files, you should always use them.

A couple of others that you're likely to encounter that aren't really type specifiers are:

    <> are used for inputting a record from a filehandle.
    \  takes a reference to something.

Note that < FILE> is neither the type specifier for files nor the name of the handle. It is the <> operator applied to the handle FILE. It reads one line (well, record - see $/) from the handle FILE in scalar context, or all lines in list context. When performing open, close, or any other operation besides <> on files, or even talking about the handle, do not use the brackets. These are correct: eof, seek and ``copying from STDIN to FILE''.