在Perl中,如何创建一个哈希表,使用目录名作为键,然后存储目录中文件的数量以及每个文件的名称?是否可以使用哈希表或数组的哈希表?如果有任何指针,请提供。
哈希值必须是标量,所以真正的问题是如何让两个值变成一个标量。引用是标量,因此对哈希的引用将起作用。
$data{$dir} = {
file_count => 0+@files,
files => \@files,
};
0+@{ $data{$dir}{files} }
来获取文件计数。如果您选择消除这种冗余,可以使用:$files{$dir} = \@files;
0+@{ $files{$dir} }
文件可用于以下方式:
@{ $files{$dir} }
0+
可以省略。)如果我理解得正确,这似乎可以解决问题(结尾处使用Dumper()打印哈希是为了向您展示哈希引用包含的内容):
#!/usr/bin/perl -w
use strict;
use Data::Dumper;
my $dir = $ENV{PWD};
opendir( DIR, $dir ) or die $!;
my @files = grep { -f "$dir/$_" } readdir( DIR );
my $hash = {
$dir => {
count => scalar( @files ),
files => \@files,
}
};
print Dumper( $hash ), "\n";
while (my $line = ) {
my($filename, $dir) = fileparse($line);
$data_{$dir}{file}=$filename;
$data_{$dir}{count}++;
}
- farhany个人而言,我几乎总是使用哈希引用而非 Perl 哈希表(也使用数组引用而非 Perl 数组)。例如:
my $dirs = {
'/home/user' => [ '.profile', '.bashrc', 'My_pic.png' ],
'/root' => [ '.profile', '.zshrc' ]
};
my $var = { (...) }
会创建一个哈希引用,=>
与逗号 ,
是同义词,但可以区分哈希键和值。 [ (...) ]
创建匿名数组引用,将其分配为哈希值。
您无需存储冗余信息,只需在标量上下文中计算数组即可:
my $root_files = $dirs->{'/root'};
$size = scalar @{$root_files};
0+
)更清晰,因为它表示将返回一个数字。我为那些认为加法适用于列表的人感到遗憾。 - ikegami"".
、0+
、!!
并不是离散的运算符,它们是粘合在一起的运算符和操作数,执行隐式强制转换。在这种情况下,使用int @files
作为指示性且无噪音的行号如何? - Richard Simões