perl的文件输出

呵呵,难道CPAN上没有处理这个事的模块吗,有兴趣楼主可以去写一个。
呵呵,方法如下:参数N行(默认10行),读取N字节(黙认1024字节),比如需要读10行,读1024字节,结果得到3行,那么模块自动10/3再加1为4,1024*4重新取就可以了。
Good Luck!


QUOTE:
原帖由 MMMIX 于 2009-1-4 18:11 发表

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

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

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

好招。


QUOTE:
原帖由 ynchnluiti 于 2009-1-4 18:25 发表

好招。

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

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


QUOTE:
原帖由 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 中其返回值是不一样的。


QUOTE:
原帖由 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, 我想<>一般指的元素,或是文件的内容, ()是什么意思呢

(<$log_file>)

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


QUOTE:
原帖由 ynchnluiti 于 2009-1-8 16:31 发表
()

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

oh,多谢指点,


QUOTE:
原帖由 ynchnluiti 于 2009-1-8 16:31 发表
()是让处于列表环境,这样就会把文件内容全部读入

其实在

[Copy to clipboard] [ - ]
CODE:
my @last = (<$log_fh>)[-20 .. -1];

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


QUOTE:
其实在

[Copy to clipboard] [ - ]
CODE:
my @last = (<$log_fh>)[-20 .. -1];

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

多谢指正