You are required to have a space before AND after $+ when concatenating two strings. The correct usage is "$+ ."
And yes, the '!' in your $read() identifier is used to delay evaluation. You probably stole that from somebody's /timer example. To better explain what this is, perform the following demonstration:
Type $!!!!!!!!!!me into your chat box and press the Tab key multiple times on your keyboard.