【发布时间】:2018-04-05 02:07:38
【问题描述】:
使用 Perl,我有两个相似的语法,
if ($a && $b) { exit() }
do { exit() } if ($a && $b)
我认为这些应该是同一件事,但是最上面的会创建一个null vK 操作码,
<1> null vK*/1 ->-
null vK 有什么意义,它有什么作用?
$ perl -MO=Concise -e'if ($a && $b) { exit() }'
8 <@> leave[1 ref] vKP/REFC ->(end)
1 <0> enter ->2
2 <;> nextstate(main 1 -e:1) v:{ ->3
- <1> null vK/1 ->8
6 <|> and(other->7) vK/1 ->8
- <1> null sK/1 ->6
4 <|> and(other->5) sK/1 ->8
- <1> ex-rv2sv sK/1 ->4
3 <#> gvsv[*a] s ->4
- <1> ex-rv2sv sK/1 ->-
5 <#> gvsv[*b] s ->6
- <@> scope vK ->-
- <;> ex-nextstate(main 3 -e:1) v ->7
7 <0> exit v* ->8
-e syntax OK
下面的诗句,
$ perl -MO=Concise -e'do { exit() } if ($a && $b)'
8 <@> leave[1 ref] vKP/REFC ->(end)
1 <0> enter ->2
2 <;> nextstate(main 1 -e:1) v:{ ->3
- <1> null vK/1 ->8
6 <|> and(other->7) vK/1 ->8
- <1> null sKP/1 ->6
4 <|> and(other->5) sK/1 ->8
- <1> ex-rv2sv sK/1 ->4
3 <#> gvsv[*a] s ->4
- <1> ex-rv2sv sK/1 ->-
5 <#> gvsv[*b] s ->6
- <1> null vK*/1 ->-
- <@> scope vK ->-
- <;> ex-nextstate(main 2 -e:1) v ->7
7 <0> exit v* ->8
【问题讨论】:
-
或
exit() if ($a && $b) -
@RingØ 不会创建无用的词法范围而不是创建无用的词法范围,它有助于分散我的问题。