Chinaunix
标题:
为什么多输出一行?
[打印本页]
作者:
pony2001mx
时间:
2014-09-12 16:18
标题:
为什么多输出一行?
本帖最后由 pony2001mx 于 2014-09-12 16:20 编辑
大家好:请教一个简单,但对我很不解的问题。我的脚本为什么输出三行,为什么不是两行?谢谢!!
文件
file
first
second
复制代码
perl脚本
#!/usr/bin/perl
open F, 'file';
%list = map {
/\S+/;
chomp;
$_, 1
} <F> ;
close F;
for $i (keys %list){
print $i, "end\n";
}
复制代码
输出结果是
end
firstend
secondend
复制代码
作者:
jason680
时间:
2014-09-12 16:26
回复
1#
pony2001mx
空
字符串 也 是
字符串
作者:
q1208c
时间:
2014-09-12 16:26
/\S+/ 是匹配没有空白就可以吧?
那 "" 算不算 ?
作者:
yestreenstars
时间:
2014-09-13 14:14
你脚本的第4行是没有任何意义的
作者:
pony2001mx
时间:
2014-09-13 18:26
谢谢大家的回复,我终于明白空字符串也匹配\S+,所以脚本的第4行没有任何意义。但我还有一个问题,我把脚本改成以下内容,为什么还不行?谢谢!
#!/usr/bin/perl
open F, 'file';
%list = map {
chomp;
$_ ne '';
$_, 1
} <F> ;
close F;
for $i (keys %list){
print $i, "end\n";
}
复制代码
作者:
substr函数
时间:
2014-09-13 21:43
亲,
你脚本的第5行是没有任何意义的!
作者:
pony2001mx
时间:
2014-09-13 22:21
第五行的目的是不输出空字符串,为什么还不行? 请教请教!
作者:
felix0608
时间:
2014-09-14 16:47
#!/usr/bin/perl
open F, $ARGV[0];
%list = map{chomp;/^\S+$/? ($_,1) : ()}<F> ;
close F;
for $i (keys %list){
print $i, "end\n";
}
复制代码
回复
7#
pony2001mx
作者:
yeahnoob
时间:
2014-09-14 17:42
本帖最后由 yeahnoob 于 2014-09-14 17:43 编辑
这个地方没必要用map吧??
完成LZ那个功能,下面这小段就可以,
#!/usr/bin/env perl
use Modern::Perl;
use warnings;
use autodie;
open my $file, "<", $ARGV[0];
for(<$file>) {
chomp;
say "$_ end" if /\w+/;
}
复制代码
作者:
pony2001mx
时间:
2014-09-14 19:19
谢谢felix0608, yeahnoob的回复!
作者:
dav_
时间:
2014-09-20 11:58
LZ你的脚本中是用map, 最后一行不论如何都会将该行加入hash
#8 就是最后加了个 if
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2