Article View: pl.comp.lang.perl
Article #844Re: Dziedziczenie obiektów (moduły w PERL'u)
From: Piotr Piatkowski
Date: Mon, 29 Dec 1997 17:56
Date: Mon, 29 Dec 1997 17:56
65 lines
2852 bytes
2852 bytes
Waldek Grudzien <waldekg@uhc.lublin.pl> wrote: : Mam następujący kłopot : : Próbuję napisać moduł, który dziedziczyłby metody z innego modułu : (obiektu). Treść modułu wygląda następująco : : ------------------------------- : package DBR; : use Pg; : use strict; ^^^^^^^^^^^^^ Dlaczego używasz słów których nie rozumiesz? :-) : @ISA = qw(Pg); : [dalej treść ...] : ------------------------------- : Po próbie uruchomienia skryptu z wykorzystaniem tego modułu : (komenda use DBR; (oczywiście w linii 4)) wyskakuje komunikat : : ------------------------------- : Global symbol "ISA" requires explicit : package name at DBR.pm line 5. : Compilation failed in require at ./t.pl line 4. : BEGIN failed--compilation aborted at ./t.pl line 4. : ------------------------------- No właśnie. use strict, włącza bardziej restrykcyjny tryb sprawdzania poprawności składniowej skryptu, który co prawda początkowo może sprawiać wiele problemów, ale za to doskonale ułatwia wykrywanie błędów (np. literówek w nazwach zmiennych) już na etapie kompilacji. Jednym z ograniczeń jakie wprowadza use strict, jest zakaz używania zmiennych globalnych, z wyjątkiem dwóch sytuacji - gdy taka zmienna jest zadeklarowana przez dyrektywę "use vars", lub gdy użyjemy pełnej nazwy (wraz z nazwą pakietu). Czyli można Twój problem rozwiązać na dwa sposoby: package DBR; use Pg; use strict; use vars qw(@ISA); @ISA = qw(Pg); ...albo: package DBR; use Pg; use strict @DBR::ISA = qw(Pg); powszechnie przyjęło się stosować tą pierwszą metodę, chociaż ja tam wolę tą drugą - kwestia smaku :-) Oczywiście można też po prostu wyrzucić "use strict", ale polecam przyzwyczaić się do tej dyrektywy - naprawdę często pozwala na szybkie wykrycie głupich błędów. Acha - przy ustawieniu "use strict" wszystkie zmienne które nie muszą być globalne (bo @ISA globalna być musi) należy deklarować przez my (np. my $x; albo my($x,$y,$z) ). -- Piotr Piątkowski, Uczelniane Centrum Informatyki, AGH Krakow, POLAND
Technical Details
Message-ID:
<688o8g$lc6$1@galaxy.uci.agh.edu.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!news.icm.edu.pl!lublin.pl!news.onet.pl!agh.edu.pl!agh.edu.pl!not-for-mailReferences:
<Pine.HPP.3.96.971229075637.10451B-100000@clinicom.uhc.lublin.pl>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!news.onet.pl!agh.edu.pl!agh.edu.pl!not-for-mail From: Piotr Piatkowski <kompas@galaxy.uci.agh.edu.pl> Newsgroups: pl.comp.lang.perl Subject: Re: Dziedziczenie obiektów (moduły w PERL'u) Date: 29 Dec 1997 18:56:32 +0100 Organization: University of Mining & Metallurgy Lines: 65 Message-ID: <688o8g$lc6$1@galaxy.uci.agh.edu.pl> References: <Pine.HPP.3.96.971229075637.10451B-100000@clinicom.uhc.lublin.pl> NNTP-Posting-Host: galaxy.uci.agh.edu.pl Mime-Version: 1.0 X-Newsreader: TIN [UNIX 1.3 unoff BETA 971018; sun4m SunOS 5.5.1] Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit