El say() se utiliza a partir de la versión Perl v5.10. Te vale con poner un 'use 5.010;' al principio del programa, para hacer uso de él. Yo uso el módulo
common::sense, que lo activa, además de otras características de lo que tiene que ser un Perl moderno.
La expresión
(($dt) ? 'es' : 'no es') es un operador ternario (
Operador condicional).
Lo que hace es lo siguiente: si $dt contiene un valor "verdadero", entonces la expresión devuelve la cadena 'es'. Si no, devuelve la cadena 'no es'.
Lo de "verdadero" se refiere a si la variable contiene un objeto DateTime o no. Si lo contiene, es que ha conseguido analizar la $fecha que le hemos pasado, y por lo tanto, es una fecha válida.
Con esto, además de validar la fecha, conseguimos tener la fecha convertida a objeto DateTime, con lo que podremos hacer muchas operaciones relacionadas con las fechas.