perl 某种格式文本循环处理使用动态多维哈希
时间: 2023-11-22 11:56:31 浏览: 91
Perl中使用动态多维哈希可以很方便地处理某种格式的文本。下面是一个示例代码,可以将以tab分隔的文本文件转换成哈希:
```perl
#!/usr/bin/perl
use strict;
use warnings;
my %hash;
while (<>) {
chomp;
my @fields = split /\t/;
my $current = \%hash;
for (my $i = 0; $i < $#fields; $i++) {
$current->{$fields[$i]} ||= {};
$current = $current->{$fields[$i]};
}
$current->{$fields[-1]} = 1;
}
# 遍历哈希
sub traverse {
my ($hash, $prefix) = @_;
$prefix ||= '';
foreach my $key (keys %$hash) {
if (ref $hash->{$key}) {
traverse($hash->{$key}, "$prefix$key/");
} else {
print "$prefix$key\n";
}
}
}
traverse(\%hash);
```
上面的代码中,使用了一个while循环读取输入文件的每一行,然后使用split函数将行按照tab分隔成一个数组。接着使用一个for循环,逐个处理数组中的元素,将其作为哈希的键值,然后将哈希的引用赋给$current变量。如果当前键值在哈希中不存在,则创建一个新的哈希。在处理完所有元素之后,将最后一个元素作为哈希的键值,将其值设为1。
最后,使用一个递归函数traverse遍历哈希,将所有键值输出。
阅读全文