免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1611 | 回复: 8
打印 上一主题 下一主题

intermediate-perl Chapter_2-习题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-03-18 20:29 |只看该作者 |倒序浏览
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;
}

做得不好,烦请大家指正

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
2 [报告]
发表于 2013-03-19 06:59 |只看该作者
谢谢,学习了!{:3_188:}{:3_188:}

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
3 [报告]
发表于 2013-03-19 08:48 |只看该作者
blackfur 发表于 2013-03-18 20:29
2. 4. 1. 习题 1 [15 分钟]

写一个程序从命令行取一个文件清单, 然后用 grep 把那些文件大小在 1000 字 ...


楼主精神很好,不过看清题目啊两个都不完全符合题目要求。第一题要求用 grep 把那些文件大小在 1000 字节以内的文件找出来。第二个 STDIN 写成小写了,也没有处理正则表达式错误的情况。

写完程序按题目的要求一条一条测试下,毕竟一个题目给十几二十分钟呢。

论坛徽章:
0
4 [报告]
发表于 2013-03-19 09:08 |只看该作者
回复 3# zhlong8


    谢谢指正,请教一下stdin的大小有何区别,平时都没留意到

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
5 [报告]
发表于 2013-03-19 09:13 |只看该作者
回复 4# blackfur


    我看的所有文档都说的是 STDIN ,今天才头一次见识到 stdin 也能工作

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
6 [报告]
发表于 2013-03-19 09:29 |只看该作者
perlop
The filehandles STDIN, STDOUT, and STDERR are predefined. (The filehandles stdin , stdout , and stderr will also work except in packages, where they would be interpreted as local identifiers rather than global.)

论坛徽章:
0
7 [报告]
发表于 2013-03-19 09:36 |只看该作者
谢谢,学习了!

论坛徽章:
1
天蝎座
日期:2013-10-28 19:28:43
8 [报告]
发表于 2013-03-19 09:59 |只看该作者
学习了。。。

论坛徽章:
0
9 [报告]
发表于 2013-03-19 20:32 |只看该作者
本帖最后由 blackfur 于 2013-03-19 20:33 编辑

回复 6# zhlong8


    测试了一下,确实在包中不能用,谢谢
错误提示:
Name "hello_t::stdin" used only once: possible typo at hello_t.pm line 7.
readline() on unopened filehandle stdin at hello_t.pm line 7.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP