zoukankan      html  css  js  c++  java
  • 第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;
    }
  • 相关阅读:
    SVN服务器搭建(一)
    排序算法二:冒泡排序
    【LeetCode】136. Single Number
    【LeetCode】217. Contains Duplicate
    【LeetCode】189. Rotate Array
    【LeetCode】122. Best Time to Buy and Sell Stock II
    【LeetCode】26. Remove Duplicates from Sorted Array
    【LeetCode】20. Valid Parentheses
    【LeetCode】680. Valid Palindrome II
    【LeetCode】345. Reverse Vowels of a String
  • 原文地址:https://www.cnblogs.com/tjxwg/p/3365215.html
Copyright © 2011-2022 走看看