Pues entonces, lo más seguro, es que tengas que invertir el sentido de las comparaciones.
Using perl Syntax Highlighting
#!/usr/bin/perl -s
use strict
;
use warnings
;
our $fdesde ||= '01/01/0001';
our $fhasta ||= '31/12/3000';
my @result = qw(
12
/12
/2008
23
/06
/2009
31
/06
/2010
01
/01
/0000
01
/01
/3001
);
foreach my $fecha ( @result ) {
print "Fecha: $fecha ";
my $paso = ( $fecha gt $fdesde and $fecha lt $fhasta ) ? 0
: 1;
if ( $paso == 0
) {
print "Está dentro del rango\n";
}
else {
print "Está fuera del rango\n";
}
}Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
- Código: Seleccionar todo
Fecha: 12/12/2008 Está dentro del rango
Fecha: 23/06/2009 Está dentro del rango
Fecha: 31/06/2010 Está dentro del rango
Fecha: 01/01/0000 Está fuera del rango
Fecha: 01/01/3001 Está dentro del rango
¡Oops! Tenemos un problema...
El uno de enero del 3001 debería estar fuera del rango, pero lo marca como que está dentro. ¿Por qué? Pues porque las comparaciones alfanuméricas se hacen de izquierda a derecha.
Perl comienza a comparar desde la izquierda, y allí ve '01/01/3001', que, desde luego, es superior al '01/01/0001'. Pero, en la parte derecha, tenemos que '01/01/' siempre va a ser inferior al '31/12/' del límite superior.
De hecho, cualquier fecha inferior al '31/12' SIEMPRE será inferior al límite superior.
Las comparaciones alfanuméricas no te sirven para lo que quieres.
Tienes varias soluciones, como por ejemplo usar alguno de los módulos gestores de fechas. O, más fácil, pasar todas tus fechas a un orden más 'lógico' para el ordenador: ir de las unidades más altas a las bajas, de izquierda a derecha:
Using perl Syntax Highlighting
#!/usr/bin/perl -s
use strict
;
use warnings
;
our $fdesde ||= '0001/01/01';
our $fhasta ||= '3000/12/31';
my @result = qw(
2008
/12
/12
2009
/06
/23
2010
/06
/31
0000
/01
/01
3001
/01
/01
);
foreach my $fecha ( @result ) {
print "Fecha: $fecha ";
my $paso = ( $fecha gt $fdesde and $fecha lt $fhasta ) ? 0
: 1;
if ( $paso == 0
) {
print "Está dentro del rango\n";
}
else {
print "Está fuera del rango\n";
}
}Coloreado en 0.002 segundos, usando
GeSHi 1.0.8.4
- Código: Seleccionar todo
Fecha: 2008/12/12 Está dentro del rango
Fecha: 2009/06/23 Está dentro del rango
Fecha: 2010/06/31 Está dentro del rango
Fecha: 0000/01/01 Está fuera del rango
Fecha: 3001/01/01 Está fuera del rango
Ahora ya sale bien.
Recuerda: la
ISO 8601 es tu amiga.