while (not eof $fh[0]) { quiere decir
"
mientras no lleguemos al
final del archivo abierto con el
primer gestor de archivo almacenado en
@fh, seguimos con el bucle".
Si suponemos que todos los archivos tienen el mismo número de filas, entonces nos vale como regla de terminación del bucle, el terminar de leer el primer archivo.
La función my() lo que hace es
declarar a la variable que le sigue como
local en el contexto donde se encuentra la función. En el programa, entonces, estamos diciendo que la variable @columnas es local dentro del while (que es el que tiene las llaves del contexto), y fuera de él, no será conocida.
Si le quitas el my(), y dejas la variable sola, estarás
usando una variable
global o una variable
local declarada antes (antes de esa línea). Si tienes activado el modo 'use strict', y
no has declarado esa variable antes de usarla, Perl sacará un mensaje de error diciendo que se ha encontrado una variable de la que no sabe de dónde viene.
Así que si quieres quitar el my(), también debes:
- quitar el modo estricto de programación, o
- declarar la variable con my() al principio del programa