theoforce 发表于 2015-12-29 08:23:55

第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);
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($_));
$year+=1900;$month +=1;
sprintf "%4d-%02d-%02d",$year,$month,$day;
} (stat $file);
printf "%-20s %10d %10d\n",$file,$atime,$mtime;
}
页: [1]
查看完整版本: 第17章课后题(高级Perl技巧)