-2

我在下面找到了一些示例脚本“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 OR 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);
        }
    }
}
4

1 回答 1

2

您选择了错误的比较运算符。

eq并且gt是字符串比较运算符。由于stat返回整数,因此您必须使用整数比较:

eq应该==

gt应该>

于 2009-12-22T02:51:59.813 回答