- 论坛徽章:
- 0
|
2. 4. 1. 习题 1 [15 分钟]
写一个程序从命令行取一个文件清单, 然后用 grep 把那些文件大小在 1000 字节以内的文件找出来。 用 map 把这个清单里的每个字串前加四个空格并在字串后面加上换行符。 然后输出列表结果。
use warnings;
use strict;
my $dir = "f:/work";
my $file;
my @dir;
$dir = shift;
chomp $dir;
opendir( DIR, $dir ) or die "can't open the directory!";
@dir = readdir DIR;
#print "@dir\n";
print map ' ' . $_ . "\n", @dir;
undef @dir;
close DIR;
2. 4. 2. 练习 2 [25 分钟]
写一个程序要求用户输入一个正则表达式的模板。 不要以命令行参数形式输入, 要从键盘读取。 然后从一些目录中(可以是硬编码的, 如: "/etc" 或 'C:\\Windows' )中读取符合模板的文件名。 重复这个操作直到用户输入空串。 要屏蔽用户输入的正斜杠 ("/" , 因为那是 Perl 里正则表达式的分隔符;输入的模板用换行符为分隔。 要保证不会因为用户输入了一个错误的正则表达式, 如括号不匹配之类的, 而导致程序崩溃。
#!/usr/bin/perl
use strict;
use warnings;
while (1) {
print "please input a regular expression: ";
my $exp = <stdin>;
if ( $exp eq "\n" ) {
exit 1;
}
chomp $exp;
my @real_exp = grep $_ !~ /\//, ( split //, $exp );
$exp = join '', @real_exp;
print "please input a directory: ";
my $dir = <stdin>;
chomp $dir;
opendir( DIR, $dir ) or die "can't open the directory!";
my @dir = readdir DIR;
my @array1 = grep /$exp/, @dir;
print map ' ' . $_ . "\n", @array1;
close $dir;
}
做得不好,烦请大家指正 |
|