Как я могу сравнить mtimes, возвращенные статом Perl? - PullRequest
0 голосов
/ 22 декабря 2009

Ниже я нашел несколько примеров использования сценария "stat".

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

спасибо.

[обновлено 0]

например, стиль ниже. когда я отлаживаю в сценарии. Я обнаружил, что значение script_ltime и значение dest_file_mtime не будут равными.

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

кстати, если я вместо сценария со стилем belwo. я нашел даже я изменил свой сценарий. Сценарий по-прежнему не будет сканироваться снова. Для значения dest_file_mtime всегда больше, чем значение source_mtime.

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

Вот почему я решил использовать eq или gt. и какой стиль лучше для «Когда я изменил один из трех файлов, сценарий всегда будет сканировать необходимое».

[обновлено 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 Ответ

2 голосов
/ 22 декабря 2009

Вы выбрали неправильные операторы сравнения.

eq и gt - операторы сравнения строк. Поскольку stat возвращает целые числа, вы должны использовать целочисленное сравнение:

eq должно быть ==

gt должно быть >

...