Avatar billede svanhovd Nybegynder
25. oktober 2002 - 13:37 Der er 4 kommentarer og
1 løsning

subrutine i ekstern fil

Jeg har en subrutine, som hiver indholdet af en querystring over i en hash:

sub getqs {
    my ($QS) = @_;
    @QS = split(/&/, $QS);
    foreach $element (@QS) {
        ($key, $value) = split(/=/, $element);
        $querydata{$key} = $value;
    }
    return $querydata;
}

Hvordan lægger jeg denne subrutine i en ekstern fil, sådan at jeg kan kalde den fra et hvilken som helst perl script?
Avatar billede kennie_nm Nybegynder
25. oktober 2002 - 14:23 #1
kig i kamelbogen under pakker
Avatar billede Thomas Nybegynder
25. oktober 2002 - 14:33 #2
Brug require.
http://www.perldoc.com/perl5.8.0/pod/func/require.html
Vær opmærksom på at din "include"-fil skal slutte af med 1;
Eksempel:
subrutine-1 {}
subrutine-2 {}
subrutine-3 {}
1;
Avatar billede svanhovd Nybegynder
30. oktober 2002 - 09:21 #3
Jeg har nu forsøgt at læse gennem dokumentationen til require uden at blive så meget klogere.

For at være helt konkret; Jeg har følgende script:
------------------------------------
#!/usr/local/bin/perl

getqs($ENV{'QUERY_STRING'});

sub getqs {
    my ($QS) = @_;
    @QS = split(/&/, $QS);
    foreach $element (@QS) {
        ($key, $value) = split(/=/, $element);
        $querydata{$key} = $value;
    }
    return $querydata;
}
----------------------

Ideelt set ønsker jeg at lægge subrutinen getqs i en ekstern fil, på en måde så jeg stadigvæk kan kalde funtionen med getqs.

Hvordan gøres dette (skåret ud i pap)....
Avatar billede Thomas Nybegynder
30. oktober 2002 - 16:30 #4
I hvert script du har, hvor du vil bruge denne funktion, skal du blot skrive:
require "sti/til/din/fil.pl";
Dog skal du i bunden af den fil du require altid have et "1;" til sidst (et-tal og et semikolon).
Dine main scripts skal derfor indeholde ovenstående linie, og dit "require"-script skal indeholde noget ala:

--- kode start
#!/usr/local/bin/perl
getqs($ENV{'QUERY_STRING'});

sub getqs {
    my ($QS) = @_;
    @QS = split(/&/, $QS);
    foreach $element (@QS) {
        ($key, $value) = split(/=/, $element);
        $querydata{$key} = $value;
    }
    return $querydata;
}
1;
--- kode slut - bemærk 1; til sidst
Håber det giver mening.
Avatar billede Thomas Nybegynder
30. oktober 2002 - 16:30 #5
hov. rutinen skal selvfølgelig ikke kaldes fra dit require-script..... den havde lige sneget sig ind!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester