你可以向一个PHP人解释Perl的哈希系统吗?

ehi*_*ime 4 php perl hash associative-array hashmap

Perl哈希是如何工作的?他们喜欢PHP中的数组还是一些完全不同的野兽?

从我的理解,它是一个关联数组对吗?这就是我的想法,直到我开始与一位Perl程序员交谈,他告诉我我完全错了,但无法以一种不会让我的眼睛交叉的方式解释它.

无论如何,我认为它的工作方式是这样的

PHP的:

$argv['dog_name'] = 'missy';
$argv[0] = 'tree';
Run Code Online (Sandbox Code Playgroud)

和Perl一样:

my %argv{'dog_name'} = 'missy';
my $argv[0] = 'tree';
Run Code Online (Sandbox Code Playgroud)

对?但是你不能打印(%argv {'dog_name'}),你必须(还原?)打印($ argv {'dog_name'})哪个令人困惑?

它是否正在尝试打印为变量,就像在PHP中一样,echo $ argv ['dog_name']; ?这是否意味着(再次)哈希只是一个PHP关联数组,其中%声明但要访问$?

我不知道,我希望有些PHP/Perl Guru可以解释哈希是如何工作的,以及它们与PHP的数组有多相似.

Eri*_*rom 11

来写

$argv['dog_name'] = 'missy';
$argv[0] = 'tree';
Run Code Online (Sandbox Code Playgroud)

在Perl中,您可以按如下方式编写它:

$argv{dog_name} = 'missy';
$argv{0}        = 'tree';
Run Code Online (Sandbox Code Playgroud)

如果你有严格的,你应该,那么你需要预先声明变量:

my %argv;
$argv{dog_name} = 'missy';
$argv{0}        = 'tree';
Run Code Online (Sandbox Code Playgroud)

如果以上内容对您来说有点重复,您可以写下:

my %argv = (
    dog_name => 'missy',
    0        => 'tree',
);
Run Code Online (Sandbox Code Playgroud)

您可以在perldata联机帮助页上找到更多详细信息.

总之,为什么印记从变更的理由%$%hash指多个散列(密钥值对的列表),并且$hash{foo}是指一种散列的单个元素.这与数组相同,其中@引用完整数组,并$引用单个元素.(对于数组和散列@,带有下标的前导符号表示数据的一部分,其中传递多个键并返回值列表)


DVK*_*DVK 5

为了详细阐述Ambrose的答案,你混淆的原因是在Perl和PHP中使用sigils的哲学之间的区别.

在PHP中,sigil附加到标识符.例如,哈希标识符总是会有一个哈希标记.

在Perl中,sigil附加到您访问数据结构的方式(您访问1值,值列表或整个值的散列) - 有关详细信息,请参阅其他优秀的答案,如Eric的.