The * prototype forces the argument expression to be evaluated in scalar context. Furthermore, if the argument expression is an identifier but not an operator, the identifier will be passed as a string ("auto-quoted"). This allows one one to create subs with the same interface as open and read.
The $ prototype forces the argument expression to be evaluated in scalar context.
The semi-colon separates the required arguments (on the left) from the optional ones (on the right).
sysreadline($foo) Passes $foo
sysreadline(FOO) Passes "FOO"
sysreadline($foo, $bar) Passes $foo and $bar
sysreadline(FOO, $bar) Passes "FOO" and $bar