我想在哈希爲一個字符串containig「/」符號來設置鍵名稱,例如爲什麼我會將我的Perl哈希看作小數部分,如'28/64'?
$myshash{"/dev/shm"} = "shared memory";
但我得到的是類似'28/64' 等與數據觀看時上::自卸車。 如何在散列鍵名稱中使用這些特殊字符?
我想在哈希爲一個字符串containig「/」符號來設置鍵名稱,例如爲什麼我會將我的Perl哈希看作小數部分,如'28/64'?
$myshash{"/dev/shm"} = "shared memory";
但我得到的是類似'28/64' 等與數據觀看時上::自卸車。 如何在散列鍵名稱中使用這些特殊字符?
記得給數據::自卸車引用你想甩什麼:
use Data::Dumper;
my %myshash;
$myshash{"/dev/shm"} = "shared memory";
print Dumper \%myshash;
輸出:
C:\Temp> t.pl $VAR1 = { '/dev/shm' => 'shared memory' };
如果您在標量上下文中計算散列值,則散列值爲空時返回false。如果有任何鍵/值對,則返回true;更準確地說,返回的值是一個字符串,由使用的存儲段數和分配的存儲段數組成,並由斜槓分隔。只有找出Perl的內部哈希算法在數據集上執行效果不佳,這才非常有用。
你的散列工作正常......這只是你正在使用Data :: Dumper不正確。
如果你這樣做:
print $myshash{"/dev/shm"};
你會看到,這是工作。
28/64來自查看哈希作爲標量,並且表示使用了多少桶(以及桶的總數)。將其轉儲爲散列而不是標量,並且您應該看到正確的數據 - 您所做的事情沒有任何問題。
也能正常工作對我來說:
use Data::Dumper;
my %hash;
$hash{"/dev/shm"} = "shared memory";
print Dumper(\%hash);
和輸出:
$VAR1 = {
'/dev/shm' => 'shared memory'
};
爲了澄清和回答您的問題根源,你不是在哈希使用特殊字符。由於大多數語言在內部將字符串散列爲整數(仍在學習Perl,但這就是Python的工作原理),所以如果需要,可以將高精靈的着作中的符文符號放在那裏,並且密鑰創建可以正常工作。哈希函數不關心。
白色這是真的語言內部散列字符串爲一個整數,這並不意味着原來的字符串並不重要。可能有幾個不同的字符串散列到相同的整數(「散列衝突」),因此原始的「密鑰」字符串仍然需要在散列結構中存儲(並查找) – JoelFan
看起來像我的作品:
$ 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>
我的錯。忘記了關於\% 非常感謝! –