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; }