PERL programmering

Perl til Windows

http://strawberryperl.com/

Perl programmer afvikles fra kommandolinie, f.eks. på PC/Windows:

C:\Users\Navn\Desktop> perl landenavne.pl navne1.txt navne2.txt + CR

perl: aktiverer programmet
landenavne.pl - programkoden - skrevet i klartekst i alm. teksteditor, men kan ikke åbnes/startes med direkte klik: programmet kræver for at kunne afvikles:
navne1.txt: filen med inddata, der skal bearbejdes af programmet - indhold ændres ikke
navne2.txt: filen med bearbejdede data, genereres af Perl under afvikling af programmet

Hvis Perl skal kunne afvikles i enhver mappe - hvor kildekoden til programmet findes, skal "Classpath" sættes op: Højreklik på ikon for "Denne PC" > Egenskaber > Avancerede systemindstillinger > Avanceret + Miljøvariabler > Rediger brugervariabler > Path. Tilføj her til enden af strengen: C:\strawberry\perl\bin\perl5.16.3 (eller bare \perl, hvis din version hedder sådan)

Windows 8 - Strawberry Perl app

  • Højreklik > Åbn filplacering
  • Ikon for genvej > Højreklik > Egenskaber: Genvej > Destination - vælg her, hvor Perl -programmet afvikles, f.eks.: C:\strawberry\perl

Perl på MAC:

Find programmet Terminal, det åbner med et skærmbillede af typen:

/users/dit_navn
new-host-7:~dit_navn$

Brug kommandoen cd (change directory) til at blade frem til placeringen af Perl, f.eks.:

new-host-7:~dit_navn$ cd desktop
new-host-7-desktop dit_navn$ cd perl

- og kør her programmet med samme type syntaks som i Windows:

new-host-7-perl dit_navn$ perl
new-host-7-perl navn$ landenavne.pl navne1.txt navne2.txt

Tilføj CPAN moduler til Perl

Gå tilbage til C:\> , brug kommandoen CPAN modulnavn, f.eks. CPAN File::Compare, så klarer systemet selv installationen. Modulnavnet skal staves med store/små bogstaver, kontroller det evt. på http://search.cpan.org/

Eksempel på Perl program:

use strict;
use warnings;

$|=1;

    my $file = $ARGV[0];
    open(INPUT, $file) or die("Input file $file not found.\n");
    my $output = $ARGV[1];
    open(OUTPUT, '>'.$output) or die "Can't create $output.\n";
    while(my $line = <INPUT>) {

$line =~ s/, Albania, /, Albania; /ig;
$line =~ s/, Argentina, /, Argentina; /ig;
$line =~ s/, Cuba, /, Cuba; /ig;
$line =~ s/, Cyprus, /, Cyprus; /ig;
$line =~ s/, Czech Republic, /, Czech Republic; /ig;
$line =~ s/, Denmark, /, Denmark; /ig;
$line =~ s/, Ecuador, /, Ecuador; /ig;
$line =~ s/, Turkmenistan, /, Turkmenistan; /ig;
$line =~ s/, U\.K\., /, U\.K\.; /ig;
$line =~ s/, UK, /, UK; /ig;
$line =~ s/, Ukraine, /, Ukraine; /ig;
$line =~ s/, Yugoslavia, /, Yugoslavia; /ig;
$line =~ s/, Zimbabwe, /, Zimbabwe; /ig;

print OUTPUT $line;
            }
close(INPUT); close(OUTPUT);

Programmet læser inddatafilen linie for linie, finder de nævnte landenavne efterfulgt af komma og skriver til uddatafilen de samme landenavne, men nu efterfulgt af semikolon - et vigtig værktøj ved analyse af forskeres institutionstilknytning, hvor flere adresser ofte er samlet i lange strenge uden andet fast mønster end netop landenavne som separatorer mellem de enkelte adresser.
Syntaks for regex find/erstat er:

~ s/find denne tekst/erstat med denne tekst/ig

Kvalifikatorerne til slut betyder:

  • i = både store og små bogstaver
  • g = global erstat

Hvis find/erstat skal strække sig over flere linier, kan man slå linie-orienteringen fra med: undef $/;
- og efterfølgende (om nødvendigt) slå den til igen med: # $/ = "\n"; #Restore for normal behaviour later in script

Fejlretning

Hvis programmet udløser en eller flere fejl, vil PERL altid fortælle, hvor første fejl findes = linienummer i program.
Arbejd med de problemfyldte programlinier, en ad gangen og begynd med den første, fordi mange efterfølgende "fejl" er forårsaget af en forudgående regulær fejl.

Medmindre andet er angivet, er indholdet af denne side licenseret under Creative Commons Attribution-ShareAlike 3.0 License