in reply to understanding symbols

the first is a special variable. In this case the OUTPUT_AUTOFLUSH variable that controls whether the output is buffered. You can read about it an other variables by typing perldoc perlvar

In the second case you have a hash that contains references to arrays. something like

%h = (a => [1,2], b => [3,4]);
. the  $h0{puts} part returns a <b>reference</b> to an array. To dereference it you need to put a '@' in front of it.  so to dereference $a, you would type <code>@$a. you a more complex expression that yields a reference you would use @{} to dereference it for clarity.

Similarly, in the third example you are dereferencing a reference to a hash $hr1 to get a hash. The third could by written more succinctly as %$hr1

Typing perldoc perlreftut will teach you about references and dereferencing.

It also sounds like you could use a good introduction to Perl. I would suggest Learning Perl or Modern Perl.

"Worry is like a rocking chair. It gives you something to do, but it doesn't get you anywhere."