
高级
Perl
技巧
|
295
grep
操作符和经典
Unix
工具同名,这个工具会使用正则表达式从文件中找出匹配成
功的行。这个任务也能用
Perl
的
grep
完成,并且威力更强大些。现在我们从一个文
件中取出包含
fred
的行:
my @matching_lines = grep { /\bfred\b/i } <$fh>;
grep
还有一个更为简单的写法。如果条件判断只是一个简单的表达式,而不是整个代
码块,那么只要在这个表达式后面用逗号结束就可以了。下面就是刚才例子的简化版
本:
my @matching_lines = grep /\bfred\b/i, <$fh>;
grep
操作符在标量上下文中返回的是符合过滤条件的元素个数。在只需要统计文件中
符合特定条件的行的数量而不必关心每行内容的时候,就可以采取这种用法。原本我
们会先提取符合条件的行存到
@matching_lines
数组,然后再行统计:
my @matching_lines = grep /\bfred\b/i, <$fh>;
my $line_count = @matching_lines;
现在完全可以跳过保存中间数组的过程(也就不必创建数组分配内存),直接通过标
量上下文赋值操作实现:
my $line_count = grep /\bfred\b/i, <$fh>;
用
map
把列表数据变形
除了过滤器之外,对于列表还有一项经常要做的工作,那就是把列表数据变形。举
个例子,假设有一堆数字需要格式化成“金额数字”输出,就像第 ...