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}
是指一种散列的单个元素.这与数组相同,其中@
引用完整数组,并$
引用单个元素.(对于数组和散列@
,带有下标的前导符号表示数据的一部分,其中传递多个键并返回值列表)
为了详细阐述Ambrose的答案,你混淆的原因是在Perl和PHP中使用sigils的哲学之间的区别.
在PHP中,sigil附加到标识符.例如,哈希标识符总是会有一个哈希标记.
在Perl中,sigil附加到您访问数据结构的方式(您访问1值,值列表或整个值的散列) - 有关详细信息,请参阅其他优秀的答案,如Eric的.
归档时间: |
|
查看次数: |
1044 次 |
最近记录: |