问题标签 [hashref]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
perl - 如何摆脱 IE::Mechanize 中的“无法通过包“sssself”错误定位对象方法“警告”?
我正在玩 Win32::IE::Mechanize。我正在尝试一个脚本来自动访问我的六个基于 Web 的电子邮件帐户。该脚本基本上可以工作,但 perl 会抛出一种神秘的“无法通过包“sssself”定位对象方法“警告”(也许你忘记加载“sssself”)错误。尽管出现错误,脚本仍然可以完成工作.但我想摆脱它并了解它为什么会发生。以下是脚本。请在我可以改进代码的地方发表评论。一如既往地感谢。
我知道线路有问题
但是我该如何纠正呢?还是我应该删除
假装没事?
欢迎任何意见:)
更新
谢谢@daotoad 清理我的丑陋代码 :) 我认为嵌套结构更易于维护且美观。
并感谢@Eric,为我指出了相关模块的更好版本:)
好吧,事情是当 Win32::IE:Mechanize 0.009 给出以下神秘的错误消息时
无法在 C:/Perl/site/lib/Win32/IE/Mechanize.pm 第 971 行通过包“sssself”找到对象方法“warn”(也许您忘记加载“sssself”?)。
0.009_17 Dev Release 给了我一些非常有意义的信息:
在 E:\mailme.pl 第 33 行没有名为“用户名”的输入控件
考虑到这个错误信息,我检查了登录页面的源文件,结果发现字段 id 应该是“用户名”,而不是“用户名”。
所以我解决了我的问题:) 谢谢你们!
perl - 如何从哈希元素的引用中获取密钥
假设$my_ref = \$hash{'mary'};
#my_ref
是哈希元素的参考点。
....
稍后,我如何使用它$my_ref
来检索它指向的哈希元素的键?即如何从中获取字符串“mary” $my_ref
?
我问这个问题是因为我有几组用户名列表,一些用户名出现在多个组中,这会消耗内存。所以我决定创建一个普通的用户名列表,让这些组只存储对应用户名的引用而不是用户名。
例如最初,
在这里,您会看到“mary”和“tom”都显示在两者中group1
,group2
它们会消耗内存。(注意我不关心这个例子中的值,值在这里只是因为数据结构是一个哈希)。所以为了减少内存,我希望有一个通用列表存储所有用户名:
组只存储哈希元素的引用:
我认为这种方法可以节省大量内存,因为:
- 一个用户名在内存中存储一次而不是多次;
- 组存储引用(整数)而不是字符串(在我的情况下,每个用户名的长度平均为 30 个字节,而每个整数只有 4 个字节(32 位系统)或 8 个字节(64 位系统)) (顺便说一句,如果整数不使用 4 个字节或 8 个字节,请纠正我。)
- 使用参考我可以立即访问用户名而无需查找。
但是如何从组中获取用户名?
如果我使用@my_ref = keys %group1
,我想我会得到 'mary' 的值,而不是 'mary'。
arrays - 如何从 hashref 内的数组中弹出?
大脑在这件事上变得模糊不清。我想将我的骰子游戏从使用 rand() 改为使用 random.org 中的随机值列表。我能够很好地检索值,我只是挂断了从列表中弹出的语法。
这是我适合的功能:
其中 $dice_stack 是指向散列的指针,其中键是骰子类型('6' 代表 d6,'20' 代表 d20),值是介于 1 和骰子类型之间的整数数组。
perl - Perl:创建散列的散列,最后一个键作为对数组的引用
需要一点帮助来创建 hashrefs 的 hashrefs,最后一个键作为对数组的引用。
想要什么:
您可以将其与键盘的输出进行比较。注意细微的差别;而不是 'd' 是具有 arrayref 的 hashref value
, 'd' 是 arrayref 并且没有value
.
memory-leaks - 将引用返回到子例程中声明的哈希会导致内存泄漏吗?
正在使用我的 %data; 下面还可以,或者我应该切换到我的 $data={}; ?
我很困惑,因为——
如果makeJson()被多次调用 - 和my %data; 在堆栈中分配,然后返回该地址-这不是内存泄漏还是可能不是“泄漏”,而是“问题”?因为在堆栈上会分配内存,它仍然被引用,因此不能被释放。
和其他方式:如果我有一个返回哈希引用的子程序,最好使用我的 %data; (更快,因为编译器预先分配?)或我的 $data={}; ?
perl - Perl:从函数返回 hashref 不起作用
当我遇到一些我不理解的奇怪行为时,我在玩弄一些没有任何用处的混淆代码。
这是我的代码。
并在缩进:
它应该做的是获取字符串foo
,构建对它的引用,然后使用该名称 ( &foo
) 调用函数。该函数应该返回一个 hashref,其中键和值都是foo
字符串。之后,它打印返回的 hashref 的 key 的值foo
,即foo
.
到目前为止,一切都很好。没用,但还是很有趣。奇怪的是,当我删除1 &&
sub 中的部分时,尽管有卷曲,它仍会返回一个列表,我不知道为什么会这样做。
如果我只是说它sub foo { { 'foo'=>'foo' } }
返回参考。为什么在我的情况下没有?此外,为什么在我添加时会出现1 &&
?
perl - Perl hashref/属性混淆
忽略如果使用严格和警告可能不会发生这种情况的事实,我想知道为什么这两种情况不同。
输出是:
为什么当索引为零时,y[0]->{name} 赋值会影响 x[0]->{name},但在索引为 1 时不会影响?
谢谢,
肖恩。
perl - Perl:将哈希引用加上其他键/值作为一个哈希引用传递的正确方法是什么?
目的是仅修改传递给函数的 hashref 参数,而不是修改原始 hashref。
我认为上述方法可行,但不确定是否有更好的方法(除了在通过之前修改原始参考)。
perl - Perl:如何将键/值对推送到 hashref 并仍然保留引用
最后$a
应该如下所示:
- /li>
最后$b
应该如下所示:
- /li>
注意:这与执行以下操作相同:
$b = { %$b, d=>1, e=>1 };
不需要,因为它会创建副本$a
并丢失引用。
perl - 在 Perl 中一步声明并填充哈希表
目前,当我想建立一个查找表时,我使用:
有没有一种方法可以一步完成内联初始化?(即在我声明它的同时填充它?)