51 I guess the tag is a variable, and it is checking for 9eaf - but does this exist in Perl? What is the "=~" sign doing here and what are the "/" characters before and after 9eaf doing?
53 From Perl documentation: OR List operators On the right side of a list operator, it has very low precedence, such that it controls all comma-separated expressions found there.
128 perldoc perlvar is the first place to check for any special-named Perl variable info. Quoting: @_: Within a subroutine the array @_ contains the parameters passed to that subroutine. More details can be found in perldoc perlsub (Perl subroutines) linked from the perlvar: Any arguments passed in show up in the array @_ .
@pst, <> is not a file handle, "null" or otherwise. It's an operator. Specifically, the readline operator. There's a reference to it as the "angle operator" in perlvar, although there isn't actually any such operator. The angle brackets are used by two operators: readline or glob. The operator depends on the contents of the brackets.
The => operator in perl is basically the same as comma. The only difference is that if there's an unquoted word on the left, it's treated like a quoted word. So you could have written Martin => 28 which would be the same as 'Martin', 28. You can make a hash from any even-length list, which is all you're doing in your example. Your Readonly example is taking advantage of Perl's flexibility with ...
The match operator is the syntax that tells the Perl interpreter: here comes a regex. In Perl, the match operator is normally delimited by '/' at start and end, but you can use delimiters (e.g., m{^foo}).
In Perl, what is a good way to perform a replacement on a string using a regular expression and store the value in a different variable, without changing the original? I usually just copy the string to a new variable then bind it to the s/// regex that does the replacement on the new string, but I was wondering if there is a better way to do this?
In the case of perl /usr/bin/perl is the path to the perl interpreter. If the hashbang is left out the *nix systems won't know how to parse the script when invoked as an executable.