“在将哈希分配给 perl 中的哈希时,“不能使用字符串 (””) 作为哈希引用,而“严格引用”在使用时出现错误
Posted
技术标签:
【中文标题】“在将哈希分配给 perl 中的哈希时,“不能使用字符串 (””) 作为哈希引用,而“严格引用”在使用时出现错误【英文标题】:"Can't use string ("") as a HASH ref while "strict refs" in use at" error while assigning hash to an hash in perl 【发布时间】:2021-09-23 22:45:44 【问题描述】:我将一个哈希 %attributes
分配给另一个哈希 %attributes_r
。我需要将其打印为该哈希 %attributes
的键/值对,如下所述。但是,在打印时,为什么我会收到这个错误,“Can't use string ("") as a HASH ref while "strict refs" in use at" in this line "foreach my $key1 (keys %$attributes_r $key) " ?
我的代码:
use strict;
use warnings;
our %attributes_r;
my %attributes = ('clear' => 0,
'reset' => 0,
'bold' => 1,
'dark' => 2,
'underscore' => 4,
'blink' => 5,
'reverse' => 7,
'concealed' => 8
);
for (keys %attributes)
$attributes_r$attributes$_ = $attributes$_;
# print "$_ => $attributes_r$attributes$_\n";
foreach my $key (keys %attributes_r)
foreach my $key1 (keys %$attributes_r$key)
print "$key1 = > $attributes_r$key$key1\n";
感谢任何帮助。
【问题讨论】:
$_
是关键,所以$attributes_r$attributes$_ = $attributes$_;
应该是$attributes_r$_ = $attributes$_;
。也许你应该给循环变量一个名字以避免混淆... /// 第二个循环没有意义。
您能否编辑问题以显示您希望新的$attributes_r
看起来像什么?我的意思是,尽可能准确地展示它——理想情况下,你会向我们展示该哈希应该是什么。
【参考方案1】:
根据您的数据,这是不正确的:
foreach my $key1 (keys %$attributes_r$key)
您正在尝试取消引用一个字符串值,而不是引用,就像错误所说的那样。如果您确实有哈希哈希,它可能会起作用,但您没有。
您可能正在尝试创建哈希哈希,我不确定。这段代码很奇怪:
$attributes_r$attributes$_ = $attributes$_;
在这里,您从原始散列中获取值并将其用作另一个散列中的键。例如:
$attributes_r0 = 0;
这并不能真正完成任何有用的事情。如果您澄清您正在尝试做什么,我可能会提出修复建议。
另外,如果您想查看您正在创建的数据结构,我建议您使用Data::Dumper
打印它,如下所示:
use Data::Dumper;
...
print Dumper \%attributes_r;
【讨论】:
我想将%attributes hash的键值对赋值给%attributes_r hash 如何在“ $attributes_r0 = 0; ”中将此 %attributes 哈希的键/值转换为 %attributes_r 哈希 如果要复制哈希,只需复制哈希:%attributes_r = %attributes
。或遍历键/值:for my $key (keys %a) $a_r$key = $a$key
。请注意,这仅适用于简单结构。
我不想复制它。我想将此哈希分配为另一个哈希的键。 (即)像这样的东西:$a_r$a$key
在我看来,您需要研究有关数据结构的 Perl 文档,然后再提出一个新问题。以上是关于“在将哈希分配给 perl 中的哈希时,“不能使用字符串 (””) 作为哈希引用,而“严格引用”在使用时出现错误的主要内容,如果未能解决你的问题,请参考以下文章
为什么类和接口不能使用private和protected?接口的方法不能使用privateprotecteddefault
excel 打开时 显示 "不能使用对象链接和嵌入" ,不能使用, 如何处理? 我是Vista系统的
TensorFlow 不能使用 GPU。 tf.test.is_gpu_available() 显示 GPU 但不能使用
未捕获的错误:输入是一个空元素标签,既不能有`children`也不能使用`dangerouslySetInnerHTML`