¿Cómo puedo comparar los mtimes devueltos por la estadística de Perl?
-
20-09-2019 - |
Pregunta
Encontré algunos usos de "estadística" de scripts de muestra a continuación.
$source_mtime = (stat($source_file))[9];
$dest_file_mtime = (stat($dest_file))[9];
$script_mtime = (stat($this_file))[9];
if (-e $dest_xml_file)
{
if ($dest_file_mtime gt $source_mtime) // gt used
{
printf "No $this_file Scan Needed\n";
exit(0);
}
# OR the style below
if ($script_ltime eq $dest_file_mtime ) // eq used
{
printf "No $this_file Scan Needed\n";
exit(0);
}
# OR the style below
if ($script_ltime eq $source_mtime ) // eq used
{
printf "No $this_file Scan Needed\n";
exit(0);
}
# or other style?
}
gracias.
Actualizado 0
por ejemplo, el estilo a continuación. Cuando depuggo en el guión. Encontré que el valor script_ltime y el valor des_file_mtime no serán equivocados.
if ($script_ltime eq $dest_file_mtime ) // eq used
{
printf "No $this_file Scan Needed\n";
exit(0);
}
Por cierto, si yo en lugar del guión con el estilo Belwo. Encontré que incluso modifiqué mi guión. El script todavía no volverá a escanear. Para el valor dest_file_mtime siempre mayor que el valor de fuente_mtime.
if ($dest_file_mtime gt $source_mtime) // gt used
{
printf "No $this_file Scan Needed\n";
exit(0);
}
No es por eso que confía usar EQ o GT. Y qué estilo es mejor para "Cuando cambié uno de los tres archivos, el script siempre escaneará necesario".
Actualizado 1
if (-e $dest_file) {
open(DEST_FILE, "$dest_file") ;
$_ = <DEST_FILE>;
close DEST_FILE;
if (/^\/\*([\w]+)\/\/([\w]+)\*\//) { # ignored by me code here
$ltime = $1; # middle variable value assignment
$script_ltime = $2;
if (($ltime eq $mtime) && # eq operator is meaningful
($script_ltime eq $script_mtime)) {
printf "No $this_file Scan Needed\n";
exit(0);
}
}
}
Solución
Has seleccionado los operadores de comparación incorrectos.
eq
y gt
son operadores de comparación de cadenas. Ya que stat
Devuelve enteros, debe usar la comparación de enteros:
eq
debiera ser==
gt
debiera ser>