in reply to How does next label work?
I thought next is just another way to say goto
Well, it's not. You can see that next and goto compile to different ops internally:
$ perl -MO=Concise -e 'X: next X' 4 <@> leave[1 ref] vKP/REFC ->(end) 1 <0> enter ->2 2 <;> nextstate(X: main 1 -e:1) v:{ ->3 3 <"> next("X") v ->4 -e syntax OK $ perl -MO=Concise -e 'X: goto X' 4 <@> leave[1 ref] vKP/REFC ->(end) 1 <0> enter ->2 2 <;> nextstate(X: main 1 -e:1) v:{ ->3 3 <"> goto("X") v ->4 -e syntax OK
Another difference is this warning here:
$ perl -wE 'sub f() { next X }; X: for (1) { f }' Exiting subroutine via next at -e line 1.
which you don't get with goto. And of course the fact that the code above terminates, but doesn't if you replace 'next' with 'goto'.
|
|---|