كيف يمكنني مقارنة MTimes التي تم إرجاعها بواسطة إحصائيات بيرل؟

StackOverflow https://stackoverflow.com/questions/1943787

  •  20-09-2019
  •  | 
  •  

سؤال

لقد وجدت بعض أنواع البرامج النصية "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);
        }
    }
}
هل كانت مفيدة؟

المحلول

لقد حددت مشغلي المقارنة الخاطئة.

eq و gt هي عوامل مقارنة السلسلة. حيث stat إرجاع الأعداد الصحيحة ، عليك استخدام مقارنة عدد صحيح:

eq يجب ان يكون ==

gt يجب ان يكون >

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top