Perl 入门:用数组和哈希统计标签出现次数
通过数组遍历和哈希累计建立标签频次,理解标量访问形式与默认值处理,并按键排序输出。
本节目标
通过数组遍历和哈希累计建立标签频次,理解标量访问形式与默认值处理,并按键排序输出。
环境与运行方法
使用 Perl 5,保存为 lesson.pl,执行 perl -c lesson.pl 后运行 perl lesson.pl。启用 strict 和 warnings,及时发现名称或未定义值问题。
核心思路
@tags 表示数组,%counts 表示哈希,访问单个元素时使用标量形式。定义或运算符为未定义的计数提供零,随后递增。
完整示例
use strict;
use warnings;
my @tags = ("perl", "text", "perl");
my %counts;
for my $tag (@tags) {
$counts{$tag} = ($counts{$tag} // 0) + 1;
}
for my $tag (sort keys %counts) {
print "$tag=$counts{$tag}\n";
}预期输出
perl=2
text=1逐步理解
my 声明词法变量,strict 可以发现未声明名称。// 只对未定义值给默认结果,与所有假值都算缺失的逻辑不同。排序键之后输出可以避开哈希遍历顺序的不确定性。
这里统计出现次数,因此重复标签会重复累计。如果统计标签涉及任务数,需要在每个任务内部去重,再累计任务贡献。全局只去重一次会让每个标签最多计一,回答的是另一种问题。
常见问题与边界
- 单个哈希元素使用标量形式。
- 不要依赖哈希原始遍历顺序。
- warnings 不应被简单关闭来掩盖问题。
动手练习
追加两个 text,观察计数和顺序。
参考答案
perl 仍为 2,text 变为 3。输出依然按标签名排序,不会因为 text 次数更多自动排在前面;排序策略需要独立说明。
文章回复
0 条公开回复