El uso de local
en una variable significa que su estado anterior debe ser empujado a una pila en algún lugar y restaurado de nuevo cuando se sale del alcance local. Al usar my
en una variable, simplemente se crea una variable completamente nueva que sombrea la variable anterior con el mismo nombre; la anterior está completamente intacta y no necesita guardarse en ninguna parte. Simplemente está al acecho cuando se sale del alcance local y es visible de nuevo.
Empujar/hacer estallar a una pila requiere recursos; hay mucho trabajo bajo el capó para garantizar que esto funcione correctamente. (Considere casos como una excepción lanzada en el ámbito local o un controlador de señal que se está ejecutando. Estoy seguro de que puede pensar en más.)
Además de ser más eficiente, usar my
es mucho más lógico. Como programador que introduce una variable local $ foo, no tiene que preocuparse por la razón semántica de la versión anterior de $ foo, qué datos pueden estar ya en ella, o de hecho si fue a $ foo ya creado. Si en algún momento de la ruta se elimina la declaración anterior de $ foo, su código local $foo
se romperá, pero my $foo
estará perfectamente satisfecho. Sea un buen programador y mantenga su código en piezas bien encapsuladas, lo que significa usar el alcance léxico tanto como pueda. Es bastante posible escribir una aplicación grande y nunca necesitar variables del paquete/alcance global en absoluto, especialmente cuando se usan clases OO bien diseñadas.
Sea un héroe * local * - intente leer el código * my *. –
No use local vs. my porque uno es más rápido que el otro; use lo que sea más correcto para lo que quiere lograr (generalmente mi). – ysth
En otras palabras: no solo cuente el tiempo que demora ejecutar un programa, sobre todo, cuente el tiempo que le toma a un programador depurarlo y corregirlo. El programador es mucho más costoso que la computadora que ejecuta el programa. – reinierpost