这是匹配用户及其家庭存储容量的代码,奇怪的是它产生相同的结果五次,而不是五次独特的结果。
open( my $storage_input, "du -shc /home/*|" );
while ( my $line3 = <$storage_input> ) {
push( @user_storage, $line3 );
}
foreach my $line3 ( @user_storage ) {
if ( $line3 =~ m/^([0-9](.){1,})M\s+\/[a-z]{1,4}\/([a-z]{4}|[a-z]{1}\d{2}[a-z]{5})/ ) {
%storage = ( "data" => "$1", "user" => "$3", );
push( @storage_data, \%storage );
}
}
print "\n";
foreach ( my $i = 0 ; $i < scalar( @storage_data ) ; $i++ ) {
print $storage_data[$i]{"user"};
print " has used ";
print $storage_data[$i]{"data"};
print " MiB of storage.\n";
}
这是我们匹配的命令输出:
3.4M /home/jony
3.4M /home/luha
40M /home/maho
35M /home/mipa
3.0M /home/svkn
答案 0 :(得分:2)
您将对%storage
的引用推送到@storage_data
,然后更改%storage
。您应该为循环的每次迭代使用不同的%storage
,即将my
添加到其赋值中。
my %storage = (
您使用strict
吗?
或者,您可以存储匿名哈希:
push @storage_data, { data => "$1",
user => "$3",
};