Perl:引用上键的参数类型必须是无lessed hashref或arrayref
我有一个Perl哈希(来自一些遗留代码),但无法打印出密钥Perl:引用上键的参数类型必须是无lessed hashref或arrayref,perl,hash,reference,Perl,Hash,Reference,我有一个Perl哈希(来自一些遗留代码),但无法打印出密钥 if (ref $val eq ref {}) { print "Keys: " . keys $val . "\n"; e、 g.以下是我得到的输出: VAL: HASH(0x7ff0898eda70) Type of argument to keys on reference must be unblessed hashref or arrayref 我读过这篇文章,但不知道如何在这种情况下应用它 有办法解决这个问题
if (ref $val eq ref {}) {
print "Keys: " . keys $val . "\n";
e、 g.以下是我得到的输出:
VAL: HASH(0x7ff0898eda70)
Type of argument to keys on reference must be unblessed hashref or arrayref
我读过这篇文章,但不知道如何在这种情况下应用它
有办法解决这个问题吗
====
更新
我也试过:
print "Keys: " . keys %$val . "\n";
但仍然获取引用上键的参数类型必须为unblessed hashref或arrayref
更新2
我可以看到我有一个键a_键
,但我无法打印出它的值。例如,使用Carp::REPL进行调试,我得到:
$ print $val;
1$ HASH(0x7fb1e0828f00)
$ print %$val;
1$ a_keyARRAY(0x7fb1e0828e28)
$ print %$val{'a_key'}
Compile error: syntax error at (eval 412) line 63, near "$val{"
BEGIN not safe after errors--compilation aborted at (eval 412) line 63, <FIN> line 6.
$ print $val{'a_key'}
Use of uninitialized value in print at (eval 413) line 63, <FIN> line 7.
1
首先,您有一个优先级问题。你在干什么
keys($val . "\n")
而不是
keys($val) . "\n"
其次,[1]的语法是
意思是你需要
keys(%$val)
最后,在标量上下文中调用keys
,它返回散列中的键数。在列表上下文中调用它以获取散列的键。比如说,
say "Keys: ", join ", ", keys(%$val);
有几个版本的Perl试验了允许键$ref
,但试验在5.24中中断。别这样李>
@ikegami你能详细说明一下吗?我刚刚重新运行了代码,得到了相同的错误消息。
设置了标量上下文,但是当你修复这个时,打印“keys:”,keys(%$href),“\n”代码>将所有键连接到一个单词中。您可以对键%$href;执行打印“$\”;打印“\n”代码>,或每行一个表示键%$href代码>我的道歉。更新的答案。是标量上下文咬了我一口<代码>打印“键:”;打印密钥(val);打印“\n”代码>为我工作。你不应该使用4年前被弃用的实验特性,这些特性已经从Perl中删除了!!!请按照我的指示使用键(%$val)
。这是我试图调试的一些遗留代码,否则就公平了。
keys(%$val)
say "Keys: ", join ", ", keys(%$val);