No, no sería 'correcto'.
undef es una función que "indefine" la expresión que le sigue o, si no se pone ninguna, simplemente devuelve el valor 'undefined' (no definido).
Para preguntar por la definición de un valor, se suele usar la función defined():
Using perl Syntax Highlighting
if ( defined $id_login ) {Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
En el trabajo normal con
select a una base de datos, como lo normal es recibir como resultado una tabla de datos, lo que se suele hacer es comprobar cuántas filas son esa tabla (con el método rows del DBI). Si es 0, entonces es que no hay resultados. El problema es que no todos los drivers de base de datos devuelven el número de filas afectadas por la query, si no que simplemente te van devolviendo filas a medida que se lo solicitas, por lo que es recomendable hacer una consulta previa para saber cuántas son. Consulta la documentación de rows en DBI.
Yo casi siempre no me preocupo de ver cuántas filas son: hago la consulta e inmediatamente recupero el resultado con alguna de las funciones fetch*. Si, luego, hago un bucle recorriendo esa estructura devuelta y no hay nada, es que no hubo respuesta de la base de datos a la consulta.
En tu caso, como sólo quieres recuperar un dato de la base de datos, es lógico ver si la variable está definida (hemos recibido el dato) o no.