🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: use sctrict i deklaracja my - rozwiązanie problemu

#861
From: Waldek Grudzien
Date: Fri, 09 Jan 1998 07:22
63 lines
3380 bytes
On Thu, 8 Jan 1998, Michał Mosiewicz wrote:

> Waldek Grudzien wrote:
> 
> > No dobrze, ale może ja nie chcę, żeby zmienne (powiedzmy robocze), które
> > wykorzystuję (deklaruję) w "części głównej programu" były widoczne w
> > funkcjach (chyba, że jawnie zadeklaruję je jako globalne używając
> > 'use vars qw(#tu lista moich zmiennych globalnych#)' )
> > Uff - chyba naświetliłem już wystarczająco ;-) ?
> 
> Hmm, ja bym powiedział, że to jest lekko nienaturalne. Zazwyczaj
> większość języków programowania posługuje się pojęciem zasięgu
> zmiennych. I chyba nie istnieje język który pozwala usuwać widoczność
> zmiennych przy zagnieżdżaniu. (OK, nie mówmy o prywatnych elementach
> obiektów)

No nie, bez przesady - za chwilę dowiem się, że przykładowo w języku C
zmienne zadeklarowane w main {} są widoczne w innych funkcjach ...
(C nie jest też jedynym językiem, który ma taką własność)
Zauważ, że w moim pytaniu nigdzie nie upierałem się przy zagnieżdżaniem.

> Wydaje mi się, że nie jest to potrzebna 'feature'. Wręcz przeciwnie, ja
...
> Natomiast, jeśli obawiasz się, że jakaś funkcja używa zmiennych
> globalnych i może to powodować błędy w działaniu programu, to w trakcie
> testów możesz je przykryć zagnieżdżonymi definicjami.

I twoim zdaniem mam przejrzeć setki linii kodu aby poprzykrywać wszystkie 
zmienne globalne ? - dzięki ...

_____________________________________________________________________________

ROZWIĄZANIE :

Nasunęło mi się z przypominania jak to się robi w C (main {}) :
_____________________________________________________________________________
use strict;

package main; {

my $c ="ccccc";
&test;
}

sub test {
  print ":$c:";
}

_____________________________________________________________________________

Działa dokładnie tak jak chciałem : wypluwa komunikat błędu (o
niezadeklarowaniu $c).
Jeśli, chcę aby $c była globalna, po prostu deklaruję ją "powyżej main" 
i po kłopocie ...

Pozdrawiam,
                              Waldek Grudzień

    ///////////////////////////////////////////
   //  http://www.uhc.lublin.pl/~waldekg/   //
  //   Lublin/Lubartów, Poland             //
  \\   University Health Care              \\
   \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Technical Details
Message-ID: <Pine.HPP.3.96.980109074808.8390A-100000@clinicom.uhc.lublin.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!news.icm.edu.pl!lublin.pl!clinicom.uhc.lublin.pl!waldekg
References: <Pine.HPP.3.96.980106080208.22789B-100000@clinicom.uhc.lublin.pl> <68t9l8$odv$1@galaxy.uci.agh.edu.pl> <Pine.HPP.3.96.980106145512.25699A-100000@clinicom.uhc.lublin.pl> <68tejj$8f2$1@galaxy.uci.agh.edu.pl> <Pine.HPP.3.96.980107101037.29387A-100000@clinicom.uhc.lublin.pl> <6907db$dkd$1@galaxy.uci.agh.edu.pl> <Pine.HPP.3.96.980108073610.3985B-100000@clinicom.uhc.lublin.pl> <34B4DF4C.1ADEFC@lodz.pdi.net>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!news.icm.edu.pl!lublin.pl!clinicom.uhc.lublin.pl!waldekg
From: Waldek Grudzien <waldekg@uhc.lublin.pl>
Newsgroups: pl.comp.lang.perl
Subject: Re: use sctrict i deklaracja my - rozwiązanie
 problemu
Date: Fri, 9 Jan 1998 08:22:07 +0100
Lines: 79
Message-ID: <Pine.HPP.3.96.980109074808.8390A-100000@clinicom.uhc.lublin.pl>
References: <Pine.HPP.3.96.980106080208.22789B-100000@clinicom.uhc.lublin.pl> <68t9l8$odv$1@galaxy.uci.agh.edu.pl> <Pine.HPP.3.96.980106145512.25699A-100000@clinicom.uhc.lublin.pl> <68tejj$8f2$1@galaxy.uci.agh.edu.pl> <Pine.HPP.3.96.980107101037.29387A-100000@clinicom.uhc.lublin.pl> <6907db$dkd$1@galaxy.uci.agh.edu.pl> <Pine.HPP.3.96.980108073610.3985B-100000@clinicom.uhc.lublin.pl> <34B4DF4C.1ADEFC@lodz.pdi.net>
NNTP-Posting-Host: clinicom.uhc.lublin.pl
Mime-Version: 1.0
In-Reply-To: <34B4DF4C.1ADEFC@lodz.pdi.net>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit