2009-11-03 20 views

回答

17

記得給數據::自卸車引用你想甩什麼:

use Data::Dumper; 
my %myshash; 
$myshash{"/dev/shm"} = "shared memory"; 
print Dumper \%myshash; 

輸出:

 
C:\Temp> t.pl 
$VAR1 = { 
      '/dev/shm' => 'shared memory' 
     }; 

見也perldoc perldata

如果您在標量上下文中計算散列值,則散列值爲空時返回false。如果有任何鍵/值對,則返回true;更準確地說,返回的值是一個字符串,由使用的存儲段數和分配的存儲段數組成,並由斜槓分隔。只有找出Perl的內部哈希算法在數據集上執行效果不佳,這才非常有用。

+1

我的錯。忘記了關於\% 非常感謝! –

3

你的散列工作正常......這只是你正在使用Data :: Dumper不正確。

如果你這樣做:

print $myshash{"/dev/shm"}; 

你會看到,這是工作。

27

28/64來自查看哈希作爲標量,並且表示使用了多少桶(以及桶的總數)。將其轉儲爲散列而不是標量,並且您應該看到正確的數據 - 您所做的事情沒有任何問題。

也能正常工作對我來說:

use Data::Dumper; 

my %hash; 
$hash{"/dev/shm"} = "shared memory"; 

print Dumper(\%hash); 

和輸出:

$VAR1 = { 
          '/dev/shm' => 'shared memory' 
        }; 

爲了澄清和回答您的問題根源,你不是在哈希使用特殊字符。由於大多數語言在內部將字符串散列爲整數(仍在學習Perl,但這就是Python的工作原理),所以如果需要,可以將高精靈的着作中的符文符號放在那裏,並且密鑰創建可以正常工作。哈希函數不關心。

+1

白色這是真的語言內部散列字符串爲一個整數,這並不意味着原來的字符串並不重要。可能有幾個不同的字符串散列到相同的整數(「散列衝突」),因此原始的「密鑰」字符串仍然需要在散列結構中存儲(並查找) – JoelFan

3

看起來像我的作品:

$ perl -de0 

Loading DB routines from perl5db.pl version 1.3 
Editor support available. 

Enter h or `h h' for help, or `man perldebug' for more help. 

main::(-e:1): 0 
    DB<1> $myshash{"/dev/shm"} = "shared memory"; 

    DB<3> x %myshash 
0 '/dev/shm' 
1 'shared memory' 
    DB<4> 
相關問題