use Try::Tiny instead of eval, confess instead of croak