El problema está aquí:
Using perl Syntax Highlighting
if ( @dia eq fecha
) {Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
¿Qué narices es eso?
Estás comparando un array con un literal, por lo que Perl pasa el array @dia a formato escalar, es decir, nos devuelve la longitud de la lista almacenada en @dia, como un entero.
Pero a continuación, haces una comparación de cadena ('eq') por lo que convierte el entero devuelto antes por el array a un string, y lo compara con fecha, que al ser un literal, lo convierte al string 'fecha' (por lo que, sospecho, debería ser corregido a $fecha, definida una línea antes).
A ver... tu lo que quieres es saber si la $fecha es el día de hoy... entonces, nos podemos olvidar de @dia. Necesitaríamos saber el formato del dato de día que extraemos desde la $linea, pero supongamos que es el mismo que el que nos devuelve localtime (valores de 1 a 31, sin relleno de cero o espacios).
Entonces... el 'if' quedaría así:
Using perl Syntax Highlighting
if ( $dia eq $fecha ) {Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Si el formato de la $fecha es distinto, quizás habrá que hacer la comparación de otra manera...
Pero recuerda... Perl NO tiene variables escalares DISTINTAS para números y para strings. Y un array NO almacena strings, sino listas de escalares (que, ocasionalmente, pueden ser strings o caracteres).