Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl:引用上键的参数类型必须是无lessed hashref或arrayref_Perl_Hash_Reference - Fatal编程技术网

Perl:引用上键的参数类型必须是无lessed hashref或arrayref

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 我读过这篇文章,但不知道如何在这种情况下应用它 有办法解决这个问题

我有一个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
我读过这篇文章,但不知道如何在这种情况下应用它

有办法解决这个问题吗

====

更新

我也试过:

    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);