Portál AbcLinuxu, 10. května 2025 13:20
Zdravim.
Pokud jste nekdo sběhlej v perlu, můžete mi poradit, jak je to s proměnnými mimo jejich "scope". Domníval jsem se, že dojde k uvolnění paměti poté co již proměnná "neexistuje". Pokud však existuje reference, můžu její obsah stále používat.
Existuje snad záznam, že existuje na proměnnou odkaz? Dojde k jejímu vymazání(uvolnění paměti) když už neexistuje žádný odkaz?
my $y; { my @x=(20,30); # @x je lokalni $y=\@x; } print $x[0]; # chyba, $x neex. print $y->[0]; # vporadku, vypise 20 undef $y; # je stale rezevovana pamet pro pole (20,30) ?
Souhlasím, že odkaz na proměnnou je vlastne odkaz na místo v paměti. Chápu také stejně, že neexistence proměnné je vlastně neexistence odkazu přes jméno.
Je však možná a v manuálech doporučená kostrukce, která vytvoří odkaz na bezejmenné pole:
my $z; { my $y=[20,30]; $z=$y; } print $z->[0]; #Pole "$y" je dostupné i mimo blok
Pole "$y" je možné z dále zvětšovat a měnit obsah, aniž by docházelo k přepisování jiných proměnných nebo seg.fault.
Aha, je tedy pravdivá moje doměnka, že k poli je někde záznam, zda na něj něco ukazuje? Vytvoření reference k poli tedy není jen prosté zaznamenání "adresy" v paměti, ale dojde při tom i k záznamu, že tato reference k danému poli existuje.
Díky
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.