/ Forside / Teknologi / Udvikling / Perl / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Perl
#NavnPoint
bjarneA 141
poul_from 50
soccer 30
Nicknack 14
Tmpj 0
use strict og kode indlæst med do
Fra : Henrik Christian Gro~


Dato : 10-06-04 23:33


Hej

Jeg sidder og roder med nogen kode til behandling af sproglige data, og
ikke overraskende er der både variable og funktioner der er
sprogspecifikke.

Fordi der også er funktioner der er sprogspecifikke har jeg umiddelbart
valgt at lade de sprogspecifikke dele ligge som perl-kode i en række
filer, hvoraf jeg så kan indlæse den relevante med 'do $filnavn'.

Det virker sådan set også, der er bare et stilmæssigt problem. Jeg ville
gerne have 'use strict; use warnings' i effekt på hele koden, men så får
jeg 'Global symbol ... requires explicit package name...' i alle de
linier hvor jeg benytter en af de variable jeg har indlæst fra min
sprogfil. Og det er ligegyldigt om de er erklæret med my eller ej i
sprogfilen. Den eneste måde jeg kan slippe af med fejlene på er ved at
omgive alle de linier hvor jeg bruger en af de pågældende variable med
'no strict;'/'use strict', og det er hverken god stil eller kønt.

Jeg vil gerne kunne indlæse sprogdata så sent som muligt (så jeg har det
bedst mulige grundlag for at indlæse data om det rigtige sprog), så det
ligner (i mine øjne) ikke den typiske anvendelse af moduler. (Jeg har
desuden ikke voldsomt godt styr at lave mine egne).

Så spørgsmålet er kort og godt: Hvad skal jeg gøre anderledes (jeg
forestiller mig det er indlæsningen af sprogfilen) og hvordan skal det
gøres?

Hvis nogen føler et behov for at vide mere om hvad det er jeg har gang
i, så er det en omskrivning af dte som er beskrevet på
http://www.sslug.dk/~grove/dte
Den nye version kan findes på
http://www.sslug.dk/~grove/en_dte.pl
og to sprogfiler på
http://www.sslug.dk/~grove/da_DK.dte
http://www.sslug.dk/~grove/fo_FO.dte

..Henrik

--
"Det er fundamentalt noget humanistisk vås, at der er noget,
der hedder blød matematik."
--- citat Henrik Jeppesen, dekan for det naturvidenskabelige fakultet

 
 
Lars Balker Rasmusse~ (12-06-2004)
Kommentar
Fra : Lars Balker Rasmusse~


Dato : 12-06-04 19:00

Henrik Christian Grove <grove@sslug.dk> writes:
> Jeg vil gerne kunne indlæse sprogdata så sent som muligt (så jeg har det
> bedst mulige grundlag for at indlæse data om det rigtige sprog), så det
> ligner (i mine øjne) ikke den typiske anvendelse af moduler. (Jeg har
> desuden ikke voldsomt godt styr at lave mine egne).

Lav .dte om til at de har en funktion, der returnerer en hash-ref i
stedet for at bruge de globale variable direkte.

$sprog.dte:
my $conjugations = { ... };
my $as = ... ;
sub genitive { ... };

sub init_dte {
return { conjugations => $conjugations,
as => $as,
genitive => \&genitive,
# ikke at funktionerne er strengt nødvendige...
};
}

en_dte.pl:
require "$sprog.dte";
my $conf = init_dte();
print "as: $conf->{as}\n";
print $conf->{genitive}->('han');

--
Lars Balker Rasmussen Consult::Perl
http://consult-perl.dk

Henrik Christian Gro~ (12-06-2004)
Kommentar
Fra : Henrik Christian Gro~


Dato : 12-06-04 22:03

Lars Balker Rasmussen <lars@balker.org> writes:

> Henrik Christian Grove <grove@sslug.dk> writes:
> > Jeg vil gerne kunne indlæse sprogdata så sent som muligt (så jeg har det
> > bedst mulige grundlag for at indlæse data om det rigtige sprog), så det
> > ligner (i mine øjne) ikke den typiske anvendelse af moduler. (Jeg har
> > desuden ikke voldsomt godt styr at lave mine egne).
>
> Lav .dte om til at de har en funktion, der returnerer en hash-ref i
> stedet for at bruge de globale variable direkte.

Det ser fornuftigt ud.

Ellers fandt jeg ud af at jeg kunne erklære alle
variablerne med my i en_dte.pl og så indlæse $sprog.dte med
eval `cat $sprog.dte`
det synes jeg bare ikke er så kønt.

..Henrik

--
"Det er fundamentalt noget humanistisk vås, at der er noget,
der hedder blød matematik."
--- citat Henrik Jeppesen, dekan for det naturvidenskabelige fakultet

Henrik Christian Gro~ (17-06-2004)
Kommentar
Fra : Henrik Christian Gro~


Dato : 17-06-04 18:45

Henrik Christian Grove <grove@sslug.dk> writes:

> Lars Balker Rasmussen <lars@balker.org> writes:
>
> > Henrik Christian Grove <grove@sslug.dk> writes:
> > > Jeg vil gerne kunne indlæse sprogdata så sent som muligt (så jeg har det
> > > bedst mulige grundlag for at indlæse data om det rigtige sprog), så det
> > > ligner (i mine øjne) ikke den typiske anvendelse af moduler. (Jeg har
> > > desuden ikke voldsomt godt styr at lave mine egne).
> >
> > Lav .dte om til at de har en funktion, der returnerer en hash-ref i
> > stedet for at bruge de globale variable direkte.
>
> Det ser fornuftigt ud.

Det virker også ganske fortrinligt. Det er selvfølgelig lidt "mærkeligt"
at kalde Init_Language-funktionen med &Init_Language og derefter kalde
alle de andre med $language_conf->{'<funktionsnavn>'}.

Hvis der (lidt mod forventning) er nogen der har lyst til at se
resultatet, skulle de nødvendige oplysninger være tilgængelige på
http://www.sslug.dk/~grove/dte

Tak for hjælpen

..Henrik

--
"Det er fundamentalt noget humanistisk vås, at der er noget,
der hedder blød matematik."
--- citat Henrik Jeppesen, dekan for det naturvidenskabelige fakultet

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408914
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste