$ x - > {a} {b}和$ x - > {a} - > {b}之间的差异

Irf*_*rfy 2 perl

有什么可以想象的区别

$x->{a}{b}
Run Code Online (Sandbox Code Playgroud)

和

$x->{a}->{b}
Run Code Online (Sandbox Code Playgroud)

对于任何允许的值$x->{a},在任何perl版本中> = 5.6?

amo*_*mon 10

不.这只是一种没有任何语义差异的语法快捷方式.

证明:编译时生成的操作码

$ perl -MO=Concise -e'$x->{a}{b}'
b  <@> leave[1 ref] vKP/REFC ->(end)
1     <0> enter ->2
2     <;> nextstate(main 1 -e:1) v:{ ->3
a     <2> helem vK/2 ->b
8        <1> rv2hv[t3] sKR/1 ->9
7           <2> helem sKM/DREFHV,2 ->8
5              <1> rv2hv[t2] sKR/1 ->6
4                 <1> rv2sv sKM/DREFHV,1 ->5
3                    <#> gv[*x] s ->4
6              <$> const[PV "a"] s/BARE ->7
9        <$> const[PV "b"] s/BARE ->a
-e syntax OK

$ perl -MO=Concise -e'$x->{a}->{b}'
b  <@> leave[1 ref] vKP/REFC ->(end)
1     <0> enter ->2
2     <;> nextstate(main 1 -e:1) v:{ ->3
a     <2> helem vK/2 ->b
8        <1> rv2hv[t3] sKR/1 ->9
7           <2> helem sKM/DREFHV,2 ->8
5              <1> rv2hv[t2] sKR/1 ->6
4                 <1> rv2sv sKM/DREFHV,1 ->5
3                    <#> gv[*x] s ->4
6              <$> const[PV "a"] s/BARE ->7
9        <$> const[PV "b"] s/BARE ->a
-e syntax OK
Run Code Online (Sandbox Code Playgroud)

另请参阅perlref,使用参考,规则3部分.