Posted By: RoboShim (ICQ #: 166 703 40) on 'CZscripts'
Title:     Re: Matice
Date:      Thu Dec 17 10:08:11 1998

> Zkusils tu matici volat jako
> $Matice[3][5] = 7;   ? :-)
> Ono totiz $Matice[3,5] neni prvek matice (=pole poli)
> ale prvek hashe s klicem "3,5"...

*** Na zacatek, hashe pouzivaji slozene zavorky a ne hranate na 
zadani klice, takze hash s klicem "3,5" by se zapsal $a{"3,5"} a ne 
$a[3,5]. Podle toho co jsem zkousel: 

#!/usr/bin/perl 
$a[0,0]="a";print "",@a,"n";
$a[0,1]="b";print "",@a,"n";
$a[1,0]="1";print "",@a,"n";
$a[1,1]="2";print "",@a,"n";
for ($i=0;$i<2;$i++) {
  for ($j=0;$j<2;$j++) {
    print "$a[$i,$j] ";
  };
  print "n";
};

haze nasledujici vysledky

a
ab
1b
12
1 2
1 2

a z toho je videt, ze ignoruje prvni index a bere az druhy AA KRUCI, ted me to
napadlo, co se deje. V PERLu jako i v C je carka operatorem zapomenuti, takze 
v tech hranatych zavorkach se vyhodnoti prvni cislo a potom se jako index do 
pole pouzije to druhy cislo. Takze jsem zkusil pouzit nasledujici:

#!/usr/bin/perl
$a[0][0]="a";print "",@a,"n";
$a[0][1]="b";print "",@a,"n";
$a[1][0]="1";print "",@a,"n";
$a[1][1]="2";print "",@a,"n";
for ($i=0;$i<2;$i++) {
        for ($j=0;$j<2;$j++) {
                print "$a[$i][$j] ";
        };
        print "n";
};

a vysledek je, zda se, spravnej:

ARRAY(0x80b9fe0)
ARRAY(0x80b9fe0)
ARRAY(0x80b9fe0)ARRAY(0x80ba1fc)
ARRAY(0x80b9fe0)ARRAY(0x80ba1fc)
a b
1 2

a funguje to i v DOSu:-) Jinak jde o to, ze se vytvari pole, ktere obsahuje 
odkazy na jina anonymni pole. Vytvareni a prace s anonymnimi poli viz. 
man perlref 
na linuxu nebo v knizce o PERLu (ted nevim, jak se presne jmenuje).

Pripadne dotazy se budu snazit zodpovedet.

Cau.

RoboShim.

Search the boards