You could use https://metacpan.org/pod/Amazon::Dash::Button, and write your own handler in Perl using an ordinary Dash button.
Perl does OO without Moose. There is a tiny bit of boilerplate, but it's essentially bless() and 1 or 2 lines in the constructor.
Try/catch blocks are indeed an add on. The traditional pattern is more golang like, returning an error code, then using Carp or similar for stack traces.
>Why would you choose something like this instead of Python or Ruby?
That might be an interesting discussion for a large codebase, but for something limited in scope like this, I just don't see the problem.