Article View: pl.comp.lang.perl
Article #51772Re: perlsvc a import modułów
From: Vava
Date: Mon, 25 Jan 2010 19:46
Date: Mon, 25 Jan 2010 19:46
69 lines
3205 bytes
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-mailReferences:
<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