第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 =~ /\A\s*\Z/;

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

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

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


    }



}

 

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

use 5.016;
use autodie;

foreach  (glob('*')) {
    my($atime,$mtime) = (stat)[8,9];
    printf "%-20s %10d %10d\n",$_,$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\n",$file,$atime,$mtime;
}
posted @ 2013-10-12 14:35  新闻官  阅读(222)  评论(0编辑  收藏  举报