Geschreven door studenten die geslaagd zijn Direct beschikbaar na je betaling Online lezen of als PDF Verkeerd document? Gratis ruilen 4,6 TrustPilot
logo-home
Document preview thumbnail
Voorbeeld 5 van de 41 pagina's
Antwoorden

Perl programmeertaal Samenvatting OPLOSSINGEN

Document preview thumbnail
Voorbeeld 5 van de 41 pagina's

Oplossingen voor oefeningen van Perl (onderdeel van Besturingssystemen I, industrieel ingenieur Informatica) (de 3 labo's, ALLE oefeningen, ook de hele moeilijke en lange). Ook tips, samenvatting van regex (achteraan document) en overzicht van meest voorkomende functies (zie voorbeeld, eerste 2 blz). Regelmatig staat er ook commentaar in de code om het duidelijker te maken. Stuur me gerust een berichtje als je de .pl files zelf ook wilt, of als je andere vragen hebt. Aangezien Perl niet meer tot de leerstof behoort sinds '20-'21, bied ik dit vanaf nu gratis aan.

Voorbeeld van de inhoud

Perl labo’s oplossingen, samenvatting & notities
In dit document: Random nuttige informatie, reeks 1, reeks 2, reeks 3, regex overzicht, overzicht speciale
variabelen (zoals $/). De oplossingen van de oefeningen zijn vaak aangevuld met extra uitleg/commentaar
Beperkte lijst van interessante functies (volgens de prof):
scalaire functies: chomp, chr, hex, index, lc, length, oct, ord, reverse, rindex, sprintf, substr, uc, split
numerieke functies: rand, srand
array functies: pop, push, shift, splice, unshift
list functies: grep, join, map, reverse, sort
hash functies: delete, each, exists, keys, values
I/O functies: close, die, eof, open, print, printf
varia: defined, eval, local, my, scalar, undef
functies voor datum en tijd: localtime, time

Naam
Uitleg en praktisch nut
functie
Scalaire functies
bij het inlezen van een bestand de enters op elke lijn weghalen.
chomp
Bv. while(<DATA>){ chomp; … }
chr chr geeft character bij nummer, bv. chr(65) = “A”
ord ord geeft nummer bij character, bv. ord(‘A’) = 65
hex interpreteert als hex-string en geeft numerieke waarde. Bv. hex ‘aF’  175
interpreteert als octaal-string en geeft numerieke waarde. Bv. oct(31) = 25
oct
(behalve indien voorafgegaan door 0x (hex) of 0b (binair), dan die interpretatie)
index STR,SUBSTR[,POS]
index Zoekt in een string naar substring, vanaf “POS”.
Returnt de 1ste index of -1 indien niet gevonden.
Werkt zoals index, maar nu wordt de laatste positie teruggegeven ipv de eerste.
rindex
(met POS de bovengrens om te zoeken)
lc en uc Lowercase en uppercase: Bv. uc(TeSt)  TEST
length geeft lengte van expressie Bv. length($string)  5
List context: returns elements of list in reverse order.
reverse
Scalar context: returns concatenated string of values. Bv. return reverse(“Hello”) -> olleH
sprintf Zie printf, maar dan wordt het gereturned ipv geprint. Bv. $text = sprintf("%0d \n", 9);
returns a substring of EXPR, starting at OFFSET within the string. Bv. substr(“okay”,2) “ay”
substr
substr EXPR, OFFSET, LEN, REPLACEMENT
split String splitten op bepaald pattern, bv. @a = split(“;”,$string); of @f = split(/:/, "1:2:3:4:5");
Numerieke functies
rand Geeft random kommagetal tussen 0 en argument, of 1 indien geen argument. Bv. rand(5)
srand sets the seed value for rand(), dus eerst srand() oproepen voor je rand() oproept.
Array functies (zie ook vraag 1.22)
pop Pops and returns the last value of the array, shortening the array by one element.
push used to push a list of values onto the end of the array. Syntax: push(Array,list).
Shifts the first value of the array off and returns it, shortening the array by 1 and moving
shift
everything down.
splice ARRAY,OFFSET,LENGTH,LIST. Removes the elements designated by OFFSET and
splice
LENGTH from an array, and replaces them with the elements of LIST, if any.
unshift <-> shift: Voegt vooraan toe aan array. Bv. unshift(@a, 70, 'Geeks');  70 Geeks @a

1

, List functies
A filter that runs a regular expression on each element of an array and returns only the
grep
elements that evaluate as true. Bv. @grepNames = grep(/^A/, @myNames);
Joins the strings of LIST into a single string with fields separated by the value of EXPR.
join
Bv. my $rec = join(':', $login,$passwd,$uid,$gid,$gcos,$home,$shell);
Array transformeren. Bv. my @doubles = map {$_ * 2} @numbers;
map
Of hash van maken: my %is_invited = map {$_ => 1} @names;
List context: print join(", ", reverse "world", "Hello"); # Hello, world
reverse
Scalar context: print scalar reverse "dlrow ,", "olleH"; # Hello, world
sort (zie 1.36) Bv. my @eldest = sort { $age{$b} <=> $age{$a} } keys %age;
Hash functies
Verwijdert element van hash -> exists geeft geen true.
delete
Bv. my $scalar = delete $hash{foo};
each Bv. while (my ($key, $value) = each %hash) { … }
True als element bestaat (mag ook undefined zijn)
exists
Bv. print "Exists\n" if exists $hash{$key};
keys Geeft alle keys van hash. Bv. my @keys = keys %ENV;
values Geeft alle values van hash. Bv. my @vals = values %ENV;
I/O functies
close Enkel nodig als je line counter $. wilt resetten. (Bij openen closet hij automatisch eerst)
die Exceptie opwerpen. Bv. open(INPUT, 'foo') or die "Can't open 'foo' for input: $!";
eof returns 1 if the next read on FILEHANDLE will return end of file or if FILEHANDLE is not open
open File openen: bv. open(FH, '<', 'c:\temp\test.txt'); of open($fh, “iets.txt);
print Simpele printfunctie… Bv. print “Hello $world”;
printf Met format, bv. printf “This is question %d on %s”, 3215, ‘Stackoverflow’;
Varia
defined Als het niet undefined is. Bv. print "Defined\n" if defined $hash{$key};
Evalueert klein stukje perl ofzo
eval Bv. # make divide-by-zero nonfatal
eval { $answer = $a / $b; }; warn $@ if $@;
local Internet zegt: zet gewoon my voor uw variabele en gebruik local niet
A my declares the listed variables to be local (lexically) to the enclosing block, file, or eval.
my
(Niet gebruikt bij de oplossingen van labo, niet nodig)
Forces EXPR to be interpreted in scalar context and returns the value of EXPR.
scalar
Bv. scalar(@array) geeft lengte van array
undef Undefines the value of EXPR, which must be an lvalue. Returns undefined value.
Datum en tijd
localtime Bv. my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
time Geeft aantal seconden sinds … terug, wordt gebruikt om o.a. localtime te feeden.




2

,Andere random informatie:
 Scalaire variabelen voorafgegaan door $
 Boolean bestaat niet. True als getal niet 0 is. String is True als hij niet leeg is.
 Strings niet vergelijken met ==, wel met eq: if($x eq $y){ … } (bij bash juist omgekeerd!!!)
omgekeerde van eq is ne (not equals)
 In for-loop is $_ huidige variabele:




 $. Geeft het aantal lijnen gelezen
 Afronden gebeurt op veelvouden van 2: -1.5  -2 ; -2.5  -2 ; 3.5  4 ; 4.5  4


$^I=”.bak”;  opent read-write mode: print() schrijft naar bestand: rechtstreeks aanpassen




Omgekeerd printen:
for(reverse 0..scalar@T){ print $T[$_]; }

Bij splice in reverse aflopen:
for(reverse 0..scalar@T){ splice @T,$_,1; )

Grep:
@T = grep {$_=~/God/} @T; # na grep komt het predicaat tussen {}
@T = grep {/God/} @T; # is zelfde

Cascade: @T = grep {…} grep {/God/} @T; #lezen van rechts naar links



$#ARRAY is laatste geldige index, @ARRAY in scalaire context is aantal elementen.
$#ARRAY-- verkleint de grootte van de array met 1.

Element vooraan array verwijderen en achteraan bijzetten:
push @processes, ($process = shift @processes);


3

,Next, redo en last binnen een loop:




Examen: bv. Puzzel met data uit html-bestand halen -> met reguliere expressies beschrijven
welk stukje je wilt -> die taggen en als returncode in tabel krijgen of zo

!!! lijn 7 en 9 doen hetzelfde:




!!! Bij het sorteren met een 2de voorwaarde moet je met or werken ipv || :




Telkens je in Perl met reguliere expressies wil werken moet je je 4 vragen stellen:
1. Lijn of slurpmode? Met andere woorden: undef $/ niet of wel?
2. Split gebruiken om met reguliere expressies delimeters te beschrijven? Of Reguliere
expressies via de m (matching) operator, de waardevolle informatie eruit halen? (Ik denk
vaker de 2de optie.)
3. Progressief of traditioneel (al dan niet met de g modifier)?
4. Scalaire of lijstcontext?

4

, Reeks 1
1. Hoe kun je een variabele instellen met een default waarde, enkel op voorwaarde dat die variabele op
dat ogenblik geen waarde heeft ?
$x = 0;

$x ||= "default"; #maar als $x een waarde bevatte bleef hij die waarde behouden

(ter info:)




2. Hoe kun je de inhoud van twee of meer variabelen cyclisch omwisselen, zonder een intermediaire
variabele te gebruiken ?




3. Geef de (numerieke) ascii-waarde weer van een willekeurig karakter. Geef de karakterrepresentatie
weer van een willekeurige numerieke ascii-waarde.
print chr(65);
print ord('A');


4. Bepaal de inverse van een willekeurige, uit woorden samengestelde string:
 enerzijds door de individuele karakters van elk woord in omgekeerde zin af te lopen (om
bijvoorbeeld palindromen te herkennen)
 anderzijds door de woorden in omgekeerde zin af te lopen, maar de volgorde van de karakters
per woord te behouden.




5. Converteer een willekeurige string in uppercase of lowercase.
uc(“Hello World”); en lc(“Hello World”);




(ter info:)



5

Documentinformatie

Geüpload op
13 mei 2020
Bestand laatst geupdate op
4 juli 2020
Aantal pagina's
41
Geschreven in
2019/2020
Type
Antwoorden
Persoon
Onbekend
Gratis
Downloaden

Verkeerd document? Gratis ruilen Binnen 14 dagen na aankoop en voor het downloaden kan je een ander document kiezen. Je kan het bedrag gewoon opnieuw besteden.
Geschreven door studenten die geslaagd zijn
Direct beschikbaar na je betaling
Online lezen of als PDF

Seller avatar
De reputatie van een verkoper is gebaseerd op het aantal documenten dat iemand tegen betaling verkocht heeft en de beoordelingen die voor die items ontvangen zijn. Er zijn drie niveau’s te onderscheiden: brons, zilver en goud. Hoe beter de reputatie, hoe meer de kwaliteit van zijn of haar werk te vertrouwen is.
indinginf
4,6
(22)
Verkocht
1090
Volgers
446
Items
1
Laatst verkocht
1 maand geleden


Waarom studenten kiezen voor Stuvia

Gemaakt door medestudenten, geverifieerd door reviews

Kwaliteit die je kunt vertrouwen: geschreven door studenten die slaagden en beoordeeld door anderen die dit document gebruikten.

Niet tevreden? Kies een ander document

Geen zorgen! Je kunt voor hetzelfde geld direct een ander document kiezen dat beter past bij wat je zoekt.

Betaal zoals je wilt, start meteen met leren

Geen abonnement, geen verplichtingen. Betaal zoals je gewend bent via Bancontact, iDeal of creditcard en download je PDF-document meteen.

Student with book image

“Gekocht, gedownload en geslaagd. Zo eenvoudig kan het zijn.”

Alisha Student

Bezig met je bronvermelding?

Maak nauwkeurige citaten in APA, MLA en Harvard met onze gratis bronnengenerator.

Bezig met je bronvermelding?

Veelgestelde vragen