Vice packages v jednom souboru

Tomáš Valoušek tomas.valousek na metalmex.cz
Neděle Březen 8 22:22:07 CET 2009


Dne 8 Březen 2009, 20:21, Honza Pazdziora napsal(a):
> On Wed, Mar 04, 2009 at 09:47:56PM +0100, Jan Kasprzak wrote:
>
>>
>> Potreboval bych pouzit podobnou konstrukci (instance RPC::PlServer,
>> chci si usetrit "use lib ..." a nekolik pravidel pro SELinux, kde bych
>> musel popsat, ze v tomto adresari jsou take soubory, ktere dany demon ma
>> pravo nacitat), ale vadi mi, ze pouhe napsani "package Neco..."
>> neprovede inicializace: kdyz mam
>>
>>
>> [...]
>> package Neco;
>>
>> our $PREFIX = '/my/dir/prefix';
>>
>> tak ten $PREFIX neni nikdy nastaveny. A ted je otazka, jak zajistit,
>> abych mel takoveto package-lokalni promenne nastavene. BEGIN-blok?
>>
>> Jak byste tohle resili?
>>
>
> Muzes upresnit, co delas a co se Ti nedari?
>
>
> Protoze:
>
>
> $ perl
>
>
> print "1\n";
>
> package Neco;
>
> our $PREFIX = '/my/dir/prefix';
>
> package main;
>
> print $Neco::PREFIX, "\n"; __END__
> 1
> /my/dir/prefix
>

Rozdil je v poradi - pokud mate nejprve package main a potom package Neco,
neprovede se import. Pritom by to mela resit funkce "import PACKAGENAME",
ale ta "neudela nic". Tento priklad funguje, pokud vsak prohodim cast
PACKAGE a MAIN, tak nefunguje

#!/usr/bin/perl -w

#CAST PACKAGE
package POKUS;
our $ourpokus="our pokus";
sub new
{
        my $s;
        $s->{hello} = 'hello';
        $s->{ourpokus} = $ourpokus;
        bless $s;
        return $s;
}
1;

# CAST MAIN
package main;
my $s = POKUS->new('Hello');
print "hello: " . $s->{hello} . "\n";
print "ourpokus: " . $s->{ourpokus} . "\n";




-- 
Tomáš Valoušek
VETOX E s.r.o.
mobil: 724 187 025
www.vetoxe.cz



Další informace o konferenci Perl