免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: cindy9902
打印 上一主题 下一主题

perl的文件输出 [复制链接]

求职 : 网络信息安全
论坛徽章:
0
11 [报告]
发表于 2009-01-04 18:18 |只看该作者
呵呵,难道CPAN上没有处理这个事的模块吗,有兴趣楼主可以去写一个。
呵呵,方法如下:参数N行(默认10行),读取N字节(黙认1024字节),比如需要读10行,读1024字节,结果得到3行,那么模块自动10/3再加1为4,1024*4重新取就可以了。
Good Luck!

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
12 [报告]
发表于 2009-01-04 18:25 |只看该作者
原帖由 MMMIX 于 2009-1-4 18:11 发表

今天看文档(perldata)学到一招

my $cnt = () = $str =~ m/\n/sg;

最后 $cnt 就是 $str 中包含的 \n 的个数。当然,这么写是由于 Perl 没有和 scalar 对应的 operator 可以提供 list context,如果有的话 ...

好招。

论坛徽章:
0
13 [报告]
发表于 2009-01-07 17:39 |只看该作者
原帖由 ynchnluiti 于 2009-1-4 18:25 发表

好招。


my $cnt = () = $str =~ m/\n/sg;

是否应该这样理解?
()得到的是个循环匹配后的数组,匹配了几次数组的维数就是多少,然后用$cnt得到?

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
14 [报告]
发表于 2009-01-07 17:47 |只看该作者
原帖由 bernana 于 2009-1-7 17:39 发表


my $cnt = () = $str =~ m/\n/sg;

是否应该这样理解?
()得到的是个循环匹配后的数组,匹配了几次数组的维数就是多少,然后用$cnt得到?

() 在这的作用就是给 m//sg 提供一个 list context,详见 perldata 中的 List value constructors. m// 在 scalar context 和 list context 中其返回值是不一样的。

论坛徽章:
0
15 [报告]
发表于 2009-01-08 16:06 |只看该作者
原帖由 MMMIX 于 2009-1-4 15:31 发表


open my $log_fh, "log_file" or die "Can't open log_file!";

my @last = ()[-20 .. -1];
print @last, "\n";


当然,如果 log_file 本身很大的话,这么做是成问题的。



我试是,是好的,但是不知道  (<$log>  为什么一定要括号和<>

oh, 我想<>一般指的元素,或是文件的内容, ()是什么意思呢

[ 本帖最后由 huanghaojie 于 2009-1-8 16:13 编辑 ]

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
16 [报告]
发表于 2009-01-08 16:31 |只看该作者

回复 #15 huanghaojie 的帖子

(<$log_file>)

$log_file是打开的文件句柄
<$log_file>从$log_file读入内容。
()是让<$log_file>处于列表环境,这样就会把文件内容全部读入

论坛徽章:
0
17 [报告]
发表于 2009-01-08 16:42 |只看该作者
原帖由 ynchnluiti 于 2009-1-8 16:31 发表
()

$log_file是打开的文件句柄
从$log_file读入内容。
()是让处于列表环境,这样就会把文件内容全部读入

oh,多谢指点,

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
18 [报告]
发表于 2009-01-08 16:57 |只看该作者
原帖由 ynchnluiti 于 2009-1-8 16:31 发表
()是让处于列表环境,这样就会把文件内容全部读入

其实在

  1. my @last = (<$log_fh>)[-20 .. -1];
复制代码

中,在 <$log_fh> 周围使用 () 是为了避免歧义(语法错误),<$log_fh> 的 list context 是由左边的 @list 提供的。

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
19 [报告]
发表于 2009-01-09 10:23 |只看该作者

回复 #18 MMMIX 的帖子

其实在
  1. my @last = (<$log_fh>)[-20 .. -1];
复制代码

中,在 <$log_fh> 周围使用 () 是为了避免歧义(语法错误),<$log_fh> 的 list context 是由左边的 @list 提供的。

多谢指正
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP