请教书上的一个perl程序-数组文件之修改时间比较

饿。。。貌似那里版块形式好不人性化啊,看了下,perl没什么帖子呢都
而且。。确实,不方便看,奇奇怪怪的
flw强人啊,又去任个版主
我想,自己有时间去c++版块学习就不错了
# 处理剩下的参数
foreach (@ARGV) {
      # 取当前处理的文件的年龄
      my $age = -M;

      # 如果当前处理文件的年龄大于已经记录的最年老文件的年龄,则让该文件成为最年老文件,记录在oldest_name和oldest_age中
      ($oldest_name, $oldest_age) = ($_, $age) if $age > $oldest_age;
}

昨晚睡觉躺床上基本都理解了每句的含义,只是:
"# 如果当前处理文件的年龄大于已经记录的最年老文件的年龄,则让该文件成为最年老文件,记录在oldest_name和oldest_age中"
-------------------如果当前处理的文件均比shift取的第一个文件old呢?那是否把这里"当前文件"的$age都赋给$oldest_age?那么如何知道在这许多"当前文件"中哪个是最old的呢?
就这里小弟不明白了,谢谢!
我晕倒,你自己程序写的啊,时间和文件名是同时赋值的
找到最老时间的,同时,就把这个文件的文件名赋给$oldest_name了
那你当然知道是哪个了
die "No file names supplied!\n" unless @ARGV;
    my $oldest_name = shift @ARGV;
    my $oldest_age = -M $oldest_name;
    foreach (@ARGV) {
      my $age = -M;
      ($oldest_name, $oldest_age) = ($_, $age)
        if $age > $oldest_age;
    }
    printf "The oldest file was %s, and it was %.1f days old.\n",
      $oldest_name, $oldest_age;

我的理解:
假如@ARVG=qw/1 2 3 4/;
my $oldest_name = shift @ARGV; #此时$oldest_name =1;

foreach (@ARGV){
if $age > $oldest_age;
..............
}#此时@ARVG中剩余的元素"2","3","4"均比"$oldest_name =1"要大,所以都要分别赋值给$oldest_name,那程序岂不是要判断2,3,4谁最大?如何判断的呢?
请帮我纠正,谢谢!



QUOTE:
原帖由 windows.li 于 2007-9-15 10:33 发表
#此时@ARVG中剩余的元素"2","3","4"均比"$oldest_name =1"要大,所以都要分别赋值给$oldest_name,那程序岂不是要判断2,3,4谁最大?如何判断的呢?...

典型的冒泡法:
2 > 1, $oldest_age = 2
3 > 2, $oldest_age = 3
4 > 3, $oldest_age = 4
刚刚熟悉了冒泡排序的原理,对于上面的程序,但偶实在不晓得通过哪个语句能看出是冒泡排序!请指点!


QUOTE:
原帖由 windows.li 于 2007-9-15 14:10 发表
刚刚熟悉了冒泡排序的原理,对于上面的程序,但偶实在不晓得通过哪个语句能看出是冒泡排序!请指点!

只是选出了最大值, 相当于冒泡排序中的第一趟.
你举例的程序中的循环也就3次, 跟着它想一遍就通了.

my @ARGV = qw/1 2 3 4/;
my $oldest_age = shift @ARGV;
foreach (@ARGV){
    $oldest_age = $_ if ($_ > $oldest_age);
}
print $oldest_age;
哈? flw 去水木了啊。。赶紧去看看