🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: perlsvc a import modułów

#51772
From: Vava
Date: Mon, 25 Jan 2010 19:46
69 lines
3205 bytes
Dnia 25-01-2010 o 19:30:09 menth0l <menth0l@remove.this.o2.pl> napisał(a):

> Spotkałem się z pewnym problemem podczas uruchamiania skompilowanych
> skryptów perla do postaci .exe za pomocą perlsvc. Wygląda to tak jakby
> exec nie widział deklaracji importu modułów (choć sam skrypt działa
> poprawnie).
>
> Problem pojawił się podczas próby definicji klasy abstrakcyjnej za pomocą
> modułu Class::Interface. Przykładowy kod:
>
> package ClassFoo;
> use Class::Interface;
> &abstract;
>
> sub foo;
> sub bar;
>
> oraz
>
> package ClassBar;
> use Class::Interface;
> &extends(ClassFoo);
>
> sub foo { print 'foo'; }
> sub bar { print 'bar'; }
>
> działa znakomicie w wersji skryptowej, tj. wymusza implementacje metod
> abstrakcyjnych. Tymczasem wersja skompilowana dochodząc do metody  
> abstract
> () rzuca błędem w stylu "Module ClassFoo doesn't use Class::Interface" co
> jest tyle dziwne, że deklaracja importu jest linijkę wyżej. Dodatkowo
> dziwne jest to, że sprawa wydaje się losowa. W tym samym module importuje
> także Class::Std, XML::TreePP oraz inne i nie ma z nimi problemu... Inne
> moduły na które trafiłem a które sprawiły podobny problem (brak
> widoczności importu) to Switch oraz TryCatch.
>
> Jak to ugryźć? No i z czego wynika ta wybiórczość widoczności modułów?

Z dokumentacji:


However, PerlSvc does not include modules that are mentioned in a  
variable. For example, in a script with the following line:
     require $module;

PerlSvc does not include the module identified by $module. To explicitly  
include this module, rebuild the PerlSvc using the --add list command-line  
switch, where list is a semicolon-delimited list of the modules you want  
to explicitly include.

Czyli perlsvc nie widzi tych wyoływanych przez zmienne.
A jakbyś zajrzał do Class::Interface i metody abstract, to tam masz

eval "use $caller";

Więc zgodnie z instrukcją spróbuj budować NTService używając --add (w tym  
'okienkowym' interfejsie do perlsvc i perapp możesz wyklikać potrzebne  
moduły)

Jak to nie zadziała, to z doświadczenia wiem, że łatwiej się diagnozuje  
takie problemy z kompilacją, próbując robić zwykłe egzeki - używając  
perlapp, a dopiero jak to działa, to budować usługi windowsowe używając  
perlsvc

Pozdrawiam
-- 
Vava
Wawrzyniec Żurowski
Victoria vale, et ubique es, suaviter sternutas
Technical Details
Message-ID: <op.u63s8hc1xt9k2g@ubik>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail
References: <hjknvh$1ctt$1@news.mm.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail
From: Vava <vava.jedenaste.nie.spamuj@plusnet.pl>
Newsgroups: pl.comp.lang.perl
Subject: Re: perlsvc a import modułów
Date: Mon, 25 Jan 2010 20:46:55 +0100
Organization: Vava
Lines: 69
Message-ID: <op.u63s8hc1xt9k2g@ubik>
References: <hjknvh$1ctt$1@news.mm.pl>
NNTP-Posting-Host: apn-77-114-246-95.dynamic.gprs.plus.pl
Mime-Version: 1.0
X-Trace: inews.gazeta.pl 1264448826 3047 77.114.246.95 (25 Jan 2010 19:47:06 GMT)
X-Complaints-To: usenet@agora.pl
NNTP-Posting-Date: Mon, 25 Jan 2010 19:47:06 +0000 (UTC)
X-User: rosomakolak
User-Agent: Opera Mail/10.10 (Win32)
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit