Ver Mensaje Individual
  #5 (permalink)  
Antiguo 09/08/2003, 12:28
leonardop
 
Fecha de Ingreso: julio-2003
Mensajes: 165
Antigüedad: 21 años, 8 meses
Puntos: 1
Hola monoswim,

Como ya lo mencionó nuestro amigo kidd, la solución en Perl está en usar referencias. Resulta que en Perl no existen las matrices multidimensionales como tal, al menos como las conocemos en C, de modo que el mecanismo para implementar este tipo de datos (en un modo muy típico de Perl) es mediante un truco que, como efecto colateral, permite usar la sintaxis que mencionas, es decir: $mi_variable[$indice1][$indice2].

En realidad, aunque suene un poco `sucio' el hecho de llamarlo truco, este es uno de esos detalles que hace el lenguaje tan bonito y rico. De hecho, gracias a que las matrices multidimensionales en Perl son en efecto referencias, no existe la limitación (existente en C por ejemplo) inherente de que cada matriz de más de una dimensión debe tener un número fijo de filas, columnas y demás (en el caso de matrices de más de dos dimensiones). Es decir, puedes tener una matriz de dos dimensiones por ejemplo, en la que cada fila puede tener un número de columnas diferente, y todo esto mediante construcciones nativas del lenguaje. En C habría que crear nuestros propios tipos de datos y habría que encargarse manualmente de la manipulación de memoria.

Bueno, en fin, como complemento al programa que ya nos compartió kidd, aquí te presento otro programa que usa referencias anónimas (denotadas por corchetes cuadrados en Perl) para definir una matriz bidimensional:

Código:
#! /usr/bin/perl -w
use strict;

use vars qw(@matriz);

@matriz = ([1, 2, 3], ['a', 'b', 'c'], ['hola', 'mi', 'gente']);

foreach my $i (0 .. 2) {
    foreach my $j (0 ..2) {
        print $matriz[$i][$j] . " ";
    }
    print "\n";
}
Este programa, como puede esperarse, produce como salida:

Código:
1 2 3
a b c
hola mi gente
Puedes leer más sobre el asunto de las referencias en la documentación de Perl.

$ perldoc perlref

http://perldoc.com/perl5.8.0/pod/perlref.html

Finalmente, quisiera remarcar un detalle sobre el código que compartió gentilmente kidd: un valor de `1' como argumento de la función exit() generalmente quiere decir que el programa debe finalizar a causa de un error, y en efecto muchos sistemas operativos y aplicaciones interpretan de ese modo cualquier valor diferente a cero, el cual es reconocido universalmente como valor de éxito. Probablemente fue el cero el número que quiso escribir nuestro amigo.

Un cordial saludo.