回答
如果我理解正確,這似乎是做招(末尾用自卸車()散列的印刷只是向你展示什麼hashref包含):
#!/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";
哈希值必須是標量,所以真正的問題是如何將兩個值合併爲一個標量。引用是標量,所以引用散列會起作用。
$data{$dir} = {
file_count => [email protected],
files => \@files,
};
請注意,文件數量是多餘的。 [email protected]{ $data{$dir}{files} }
可用於文件計數。如果您選擇擺脫這種冗餘,可以使用
$files{$dir} = \@files;
的文件數可作爲
[email protected]{ $files{$dir} }
和文件是作爲
@{ $files{$dir} }
(該0+
能在標量上下文中省略)。
在我看來,'scalar @ files'比'0 + @ files'更具可讀性。 –
@Alan Haggai Alavi,你是我聽到的第一個這樣說的人,很多人告訴我相反。大多數人認爲數字化操作符('0 +')更清晰,因爲它表示一個數字將被返回。我可惜認爲加法在名單上工作的人。 – ikegami
@Alan Haggai Alavi,'「」.'是一個字符串操作符,'0 +'是一個數字化操作符,'!!'是一個布爾化操作符。有些時候你必須使用其中的一種而不是'標量',這些時間比不能使用這些時間的時間更多,並且必須使用'標量',所以我建議你習慣它們。您似乎對缺乏可讀性和缺乏熟悉感感到困惑。 – ikegami
個人幾乎都是我用散列引用,而不是perl的哈希值(和arrayrefs而不是perl的陣列,也)。例如:
my $dirs = {
'/home/user' => [ '.profile', '.bashrc', 'My_pic.png' ],
'/root' => [ '.profile', '.zshrc' ]
};
my $var = { (...) }
使得散列引用,=>
只是一個逗號,
的同義詞,但允許混雜鍵和值之間進行區分。 [ (...) ]
使得被指派爲散列值的匿名數組引用成爲可能。
你不必像存儲文件數量的冗餘信息,你可以評估在標量上下文數組:
my $root_files = $dirs->{'/root'};
$size = scalar @{$root_files};
- 1. Perl:散列中數組的大小,在另一個散列
- 2. Perl:在散列內部的標量變量中創建一個數組ref
- 3. 如何在perl中創建散列哈希?
- 4. 如何在perl中創建對象的散列
- 5. 如何在Perl中創建散列哈希?
- 6. 在Perl中,你如何創建和使用散列數組?
- 7. 如何創建一個散列表
- 8. 創建散列
- 9. 在sql server中爲一組行創建一個散列
- 10. Perl - 創建一個蠻力列表
- 11. Perl - 散列散列(散列和標量)?
- 12. 散列在散列Perl代碼問題
- 13. 修改在Perl的散列內散列
- 14. 在散列時將多個值賦給perl中的一個鍵
- 15. 在奇怪的行爲循環中創建一個散列
- 16. 如何在C中創建一個字符串的md5散列?
- 17. 如何從Perl中的哈希數組創建哈希散列?
- 18. 從json編碼/解碼中使用變量創建散列perl
- 19. 創建一個ArrayList,在每個值的散列表
- 20. 在PHP中創建自己的散列?
- 21. 創建在Perl的子程序,將採取的哈希從散列的散列作爲參數,並從該散列打印出的其中一個值
- 22. 在perl中移動一個未命名的散列?
- 23. 如何從兩個散列創建單個散列,其中一個散列的值是另一個散列的鍵子集的子集?
- 24. 的Perl:在嵌套散列
- 25. 經由命令行參數發送散列的散列從一個Perl CGI程序到另一個Perl腳本
- 26. 在任一個散列或散列
- 27. Perl CSV來散列
- 28. 從一個文件中取多行並創建散列
- 29. 如何在Perl中創建列輸出?
- 30. 如何有效地創建連續數字的perl散列?
這種方法呢?談到哈希時,我對Perl很陌生。(my $ line =){ my($ filename,$ dir)= fileparse($ line); $ data _ {$ dir} {file} = $ filename; $ data _ {$ dir} {count} ++; } –
farhany
而不是自己粘貼路徑,使用File :: Spec(或建立在它上面的東西)。 –