🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.perl
Article #51664

Re: Jak dobrać się do zmiennej

#51664
From: Adam Osuchowski
Date: Fri, 30 Oct 2009 16:14
34 lines
2814 bytes
Slawek wrote:
> nie chcę zmieniać zawartości zmiennych.
> chcę tylko zachować czytelność kodu i zamiast wciskać ileś linijek w główny 
> skrypt
> to chciałem zrobić funkcję na końcu skryptu.
> Natomiast po zwróceniu uwagi miło by było zobaczyć także rozwiązanie
> np "ale jeśli już musisz iść tą drogą, to zrób tak ..."    :)
> bo ja nadal nie mam pomysłu.

Byłoby może i miło, ale w tej postaci, którą podałeś jest to niewykonalne,
a przynajmniej nie w sposób, który by znacząco nie zaciemnił kodu, więc
nie oczekuj cudów jeśli stawiasz takie ograniczenia. my() deklaruje
zmienną o zasięgu leksykalnym (prywatną), czyli taką, której widoczność
poprzez swoją nazwę jest ograniczona do najbardziej wewnętrznego bloku
wyznaczonego za pomocą { i }. Możesz się dostać do jej zawartości poza
tym blokiem, pod warunkiem, że będziesz miał w zasięgu zapamiętaną
referencję do tej zmiennej. Można też, ew. próbować cudawianek z evalem
albo preprocesingiem, ale to wyjdzie Ci z tego potworek rodem z golfa
albo IOCCC.

> Oczywiście w żadnym wypadku zmienne nie mogą byc przekazywane jako parametry
> po przez np &test($bb) ponieważ w moim programie za dużo jest takich
> zmiennych.
> Pewnie musi być coś a'la $main::bb ale się pogubiłem.

W tym sęk, że w ten sposób możesz się dostać do zmiennych pakietowych,
a nie do zmiennych prywatnych. Uważam, podobnie jak Dozzie, że spokojnie
dałoby się to przepisać w takiej postaci, aby było czytelne (i nie
wykluczone, że czytelniejsze niż masz to teraz) i jednocześnie spełniało
swoje zadanie bez takiej kombinatoryki. Swoją drogą, skoro chcesz się
dostawać do zmiennych spoza swojego zasięgu, to po co je tam deklarowałeś
jak prywatne? Zmienne do których powinien mieć dostęp cały kod to zmienne
globalne, a reszta jest prywatna, ew. przekazywana przez parametry wywołań
funkcji.
Technical Details
Message-ID: <20091030161429.6b8b4567@polsl.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!agh.edu.pl!news.agh.edu.pl!polsl.pl!not-for-mail
References: <hcerkh$17k$1@news.onet.pl> <slrnheltc8.v60.dozzie@dynamit.im.pwr.wroc.pl> <hceu58$9p0$1@news.onet.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!agh.edu.pl!news.agh.edu.pl!polsl.pl!not-for-mail
From: Adam Osuchowski <someone@somewhere.com>
Newsgroups: pl.comp.lang.perl
Subject: Re: Jak dobrać się do zmiennej
Date: Fri, 30 Oct 2009 16:14:29 +0000 (UTC)
Organization: Politechnika Slaska, Gliwice
Lines: 34
Message-ID: <20091030161429.6b8b4567@polsl.pl>
References: <hcerkh$17k$1@news.onet.pl> <slrnheltc8.v60.dozzie@dynamit.im.pwr.wroc.pl> <hceu58$9p0$1@news.onet.pl>
NNTP-Posting-Host: hydra.ck.polsl.pl
Mime-Version: 1.0
X-Trace: polsl.pl 1256919269 5715 157.158.1.11 (30 Oct 2009 16:14:29 GMT)
X-Complaints-To: news@polsl.pl
NNTP-Posting-Date: Fri, 30 Oct 2009 16:14:29 +0000 (UTC)
In-Reply-To: <hceu58$9p0$1@news.onet.pl>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit