Jak alokovat pole; jak vytvorik referenci na kopii pole
Honza Pazdziora
adelton na informatics.muni.cz
Úterý Červenec 30 10:48:18 MEST 2002
On Tue, Jul 30, 2002 at 09:55:59AM +0200, Martin Sittek wrote:
> Jestli tomu dobře rozumím, tak tenhle příkaz
>
> $pole[$pocet_polozek - 1] = 'konkretni_ne_undef_hodnota';
>
> vytvoří pole, v němž bude @pole[0..$pocet_polozek-2] == undef a
> v $pole[$pocet_polozek-1] == 'konkretni_ne_undef_hodnota'.
Ano.
> > @pole = ( 'hodnota' ) x $pocet_polozek;
>
> A tady bude vždy ve všech polích 'hodnota', což je ještě lepší.
Je otázka, čeho chcete dosáhnout, ale ano: v jistých případech to je
lepší.
> Nicméně jak si tak s tím tady hraju, tak už si nejsem tak úplně jistý
> jestli má cenu to pole vůbec 'alokovat'. Měl jsem totiž pocit, že
> když jej budu 'alokovat' (byť na hodnotu undef) tak se při použití
> $x = $pole[$hodnota_v_mezich_pole] vyhnu takové té hlášce:
> use uninicialized value, nicméně jak to tak zkouším - asi to není
> pravda. Myslíte si, že má smysl provádět tuto 'alokaci'?
$ perl -w
use strict;
my @a;
my $x = $a[5];
__END__
$
Nemá, protože problém je evidentně někde jinde -- samotné přiřazení
nedefinované hodnoty hlášení Use of uninitialized value nedává. Dá je
třeba až použití té nedefinované hodnoty při interpolaci ve stringu,
nebo tak. A pak je otázka, jestli chcete mít zaplácanou paměť tím
polem (jak to má být vlastně velké, 10 prvků nebo 10_000_000 prvků?)
nebo jestli si vykódujete ošetření undef hodnot v tom kódu, kde se
používají, nebo že na vhodná místa dáte local $^W = 0;
> > > - jak vytvořit referenci na kopii nějakého konkrátního pole. Zatím
> >
> > $ref = [ @pole ];
>
> Toto je přesně co jsem hledal.
Super.
> > Nebo to zadání bylo "jak vytvořit pole obsahující ve svých prvcích
> > reference na odpovídající prvky původního pole"? Nebo to zadání bylo
> 2.
> > "jak vytvořit pole obsahující ve svých prvcích reference na kopie
> > prvků původního pole"?
> >
>
> Myslel jsem tu druhou variantu, resp. "jak vytvořit pole obsahující
> ve svých prvcích reference na kopie celého původního pole".
No, čili pak už nám zbývá pouze si ujasnit, jestli prvky toho nového
pole mají být opravdu reference na skaláry, a to na skaláry, které
jsou kopiemi těch původních prvků, nebo jestli prvky toho nového pole
mají být přímo kopie těch původních prvků, což dělá právě to
Jinak samozřejmě
@new = @pole;
zkopíruje prvky pole bez problémů také.
--
------------------------------------------------------------------------
Honza Pazdziora | adelton na fi.muni.cz | http://www.fi.muni.cz/~adelton/
... all of these signs saying sorry but we're closed ...
------------------------------------------------------------------------
Další informace o konferenci Perl