I found expect (which is Tcl + some extensions, I believe) to be quite useful.
Implementing something like modem initialization - "Send AT command to modem/wait for a reply matching one of several patterns or a timeout/handle result/rinse, lather, repeat until done" - is quite trivial to do with expect.
It's not something I use every day, but it's one of those useful things to keep in your mental toolbox.
Came here to say this. Expect was and remains extremely powerful.
I've been using it for 15 years to automate network configuration deployment. Now that automation is all the rage in the industry it gets dismissed, but I find it is often much better than some of the other tools available.
Implementing something like modem initialization - "Send AT command to modem/wait for a reply matching one of several patterns or a timeout/handle result/rinse, lather, repeat until done" - is quite trivial to do with expect.
It's not something I use every day, but it's one of those useful things to keep in your mental toolbox.