2009-12-22 5 views
-2

J'ai trouvé quelques exemples de scripts "stat" d'utilisation ci-dessous.Comment comparer les temps retournés par les statistiques de Perl?

$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? 
} 

merci.

[mise à jour 0]

par exemple le style ci-dessous. quand je débogue dans le script. J'ai trouvé la valeur de script_ltime et la valeur de dest_file_mtime ne seront pas égales.

if ($script_ltime eq $dest_file_mtime) // eq used 
{ 
    printf "No $this_file Scan Needed\n"; 
    exit(0); 
} 

btw, si je remplace le script par le style belwo. J'ai même trouvé que j'ai modifié mon script. Le script ne sera toujours pas analysé à nouveau. Pour la valeur dest_file_mtime, toujours supérieure à la valeur source_mtime.

if ($dest_file_mtime gt $source_mtime) // gt used 
{ 
    printf "No $this_file Scan Needed\n"; 
    exit(0); 
} 

Pourquoi ne pas avoir utilisé eq OR gt? et quel style est mieux pour "Quand j'ai changé l'un des trois fichiers, le script va toujours scanner nécessaire."

[mis à jour 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); 
     } 
    } 
} 
+1

Avez-vous des questions? –

+1

Cela dépend de ce que vous voulez comparer. En d'autres termes, vous devez savoir ce que vous voulez faire avant de pouvoir déterminer comment vous allez le faire. –

+0

@Alexandr. mis à jour plus haut. Je vous remercie. –

Répondre

2

Vous avez sélectionné les opérateurs de comparaison mal.

eq et gt sont des opérateurs de comparaison de chaînes. Depuis stat retourne des entiers, vous devez utiliser la comparaison entier:

eq devrait être ==

gt devrait être >

+0

@Alan, Bonjour. Après se référer à mon livre Perl. J'ai trouvé l'information belwo: "Perl peut indexer dans une liste comme s'il s'agissait d'un tableau.Il s'agit d'une tranche de liste" Le livre a dit qu'il s'agit d'une tranche de liste. Non mentionné le type de retour mtime. Quand je bouscule avec KomodoIDE. Je ne peux pas non plus trouver le type de valeur mtime. L'IDE affiche RIEN dans la colonne TYPE de la sous-fenêtre locale. Je vous remercie. –

+0

@ Cela signifie-t-il que 'eq' et '==' fonctionnent bien? merci –

+0

Salut Nano. 'eq' et' == 'sont différents. 'eq' fait ** comparaison de chaînes **. Alors que == fait ** une comparaison numérique **. Perl est un langage _loignement typé_. Par entiers, je voulais dire des nombres sans décimales. –

Questions connexes