第17章课后题(高级Perl技巧)

17.1 写一个程序,从文件中读取一组字符串(每行一个),然后让用户键入模式以便进行字符串匹配。
对于每个模式,程序应该说明文件里共有多少字符串匹配成功,分别是哪些字符串。
对于所键入的每个新模式,不应重新读取文件,应该把这些字符串存放在内存里。文件名可以直接写在程序里。

use 5.016;
use autodie;

my $file_name = 'sample.txt';

open my $fh ,'<',$file_name;

chomp (my @strings=<$fh>);

while(1) {
    say 'Please enter a pattern:';
    chomp(my $pattern =<STDIN>) ;

    last if $pattern =~ /As*/;

    my @matches = eval {grep /$pattern/,@strings};

    if($@) {
        print "Error: $@";

    } else {
        my $count = @matches;
        say "There where $count matching strings:",
            map "$_
", @matches;;


    }



}

17.2 写一个程序,报告当前目录下所有文件的最后访问时间和最后修改时间,单位为秒,用stat取得文件的时间戳信息,利用切片的写法
提取这两个元素。

use 5.016;
use autodie;

foreach  (glob('*')) {
    my($atime,$mtime) = (stat)[8,9];
    printf "%-20s %10d %10d
",$_,$atime,$mtime;
}

17.3 修改上题程序,把时间格式改为YYYY-MM-DD的形式。用map逐个输出,并用localtime通过列表切片提取纪年时间的年,月,日子段。

use 5.016;
use autodie;

foreach my $file ( glob('*')) {
    my($atime,$mtime) = map {
        my($year,$month,$day) = (localtime($_))[5,4,3];
        $year+=1900;$month +=1;
        sprintf "%4d-%02d-%02d",$year,$month,$day;
    } (stat $file)[8,9]; 

    printf "%-20s %10d %10d
",$file,$atime,$mtime;
}
原文地址:https://www.cnblogs.com/tjxwg/p/3365215.html