为什么在Perl中连接数组会产生数字?

pla*_*etp 1 arrays perl concatenation

我只是尝试用Perl连接Perl中的数组+并得到奇怪的结果:

perl -wE 'say([1, 2, 3] + [4, 5, 6])'
73464360
Run Code Online (Sandbox Code Playgroud)

使用哈希执行相同操作似乎是语法错误:

perl -wE 'say({} + {})'
syntax error at -e line 1, near "} +"
Execution of -e aborted due to compilation errors.
Run Code Online (Sandbox Code Playgroud)

第一个表达的结果是什么?是否记录在任何地方?

mob*_*mob 7

它来自引用的数量,它产生引用的内存地址.

perl -E 'say \@a; say 0+\@a; printf "%x\n",0+\@a'
Run Code Online (Sandbox Code Playgroud)

典型输出(尽管每次运行程序时都可能会更改)

ARRAY(0x1470518)
21431576
1470518      <--- same number as in first line
Run Code Online (Sandbox Code Playgroud)

您的哈希引用示例几乎可以工作,但似乎Perl将第一组{}块解析为代码块而不是哈希引用.如果您使用一元+并强制Perl将其视为哈希引用,它将起作用.我的意思是"工作".

perl -E 'say(+{} + {})'
40007168
Run Code Online (Sandbox Code Playgroud)

  • 埃.当它看到`say({`时,它认为你正在使用`say BLOCK LIST`语法(用于说'$ {handle {$ x}}"foo";`) (4认同)