我在下面找到了一些示例脚本“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);
}
}
}
答案 0 :(得分:2)
您选择了错误的比较运算符。
eq
和gt
是字符串比较运算符。由于stat
返回整数,因此必须使用整数比较:
eq
应为==
gt
应为>