• 第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;
    }
  • 相关阅读:
    mysql下载与安装
    Observable Flowable Test
    Linux 技巧:让进程在后台可靠运行的几种方法
    CallBack
    Linux内存分析
    Linux安装svn
    百度地图api
    安装Mysql官方的sakila数据库
    yii2 展示静态页面
    yii2 手动安装第三方扩展
  • 原文地址:https://www.cnblogs.com/tjxwg/p/3365215.html
Copyright © 2020-2023  润新知