Recover from microbel

This commit is contained in:
Kursmester 2025-03-05 12:33:13 +01:00 committed by h7x4
commit f46dae2dea
Signed by: oysteikt
GPG Key ID: 9F2F7D8250F35146
10 changed files with 2349 additions and 0 deletions

31
Hello.pl Normal file

@ -0,0 +1,31 @@
# Ny fil! Dette er "hils.pl"
package main; # Hoved-navnerommet heter "main", og trengs ikke å
# annonseres på denne måten, egentlig. Med mindre vi
# har flere "package" i samme fil...
use Hello;
my $friend = Hello::person("Gorm", "M");
my @other_friends = (
Hello::person("Natalija", "K"),
Hello::person("Remi", "M") );
# Og så hilser vi po et par venner :)
Hello::hils( $friend );
Hello::hils( $other_friends[0] );
Hello::hils( $other_friends[1] );
Hello::hils( $friend );
Hello::hils( $other_friends[0] );
Hello::hils( $friend );
Hello::vis_ant_hilsninger( $friend );
Hello::vis_ant_hilsninger( $other_friends[0] );
Hello::vis_ant_hilsninger( $other_friends[1] );
__END__
Ferdig! Vi kunne ha fått penere kode ved å importere symbolene fra
Hello.pm, men da mister vi fordelen av å vite nøyaktig hvilken pakke
funksjonene hører til i.

37
Hello.pm Normal file

@ -0,0 +1,37 @@
# Vi starter med å lage en fil som vi kaller Hello.pm
package Hello; # Samme navn som fila, men uten ".pm"
# Om fila het Hello/World.pm, må vi kalle pakken Hello::World
sub person {
my $navn = shift;
my $kjonn = shift;
die "person() skal ha 2 argumenter" unless @_ == 0;
die "$navn sitt kjønn må være 'M' eller 'K'! (ikke '$kjonn')\n"
unless $kjonn =~ m/^[MK]$/;
return [ $navn, $kjonn, 0 ]; # siste tallet er en "hilse-teller"
}
sub hils {
my $person = shift; # vi venter oss returverdien fra person()
my $hva = $person->[1] eq "M" ? "han" : "hun";
my $hvem = $person->[0];
$person->[2]++; # hvor mange ganger $person er blitt hilst på?
print "Nei, se! Der har vi jo $hva $hvem!\n";
}
sub vis_ant_hilsninger {
my $person = shift;
my $hvem = $person->[0];
my $ant = $person->[2];
print "Vi har hilset på $hvem $ant gang",
( $ant-1 ? "er" : "" ), "\n";
}
1; # det er viktig at alle moduler returnerer en sann verdi!

32
Hello2.pl Normal file

@ -0,0 +1,32 @@
#!/usr/bin/perl -w
# Ny fil! Dette er "Hello2.pl"
use strict;
use diagnostics;
use Hello2; # Hello22.pm må være tilgjegelig i @INC for at dette skal
# fungere smertefritt.
my $friend = Hello2->new("Gorm", "M");
my @other_friends = (
Hello2->new("Natalija", "K"),
Hello2->new("Remi", "M") );
# Og så hilser vi po et par venner :)
print $friend->hils();
print $other_friends[0]->hils();
print $other_friends[1]->hils();
print $other_friends[1]->hils();
print $friend->hils();
print $other_friends[1]->hils();
print $other_friends[0]->hils();
print $friend->vis_navn(), " hilset ",
$friend->vis_ant_hilsninger(), " ganger\n";
print $other_friends[0]->vis_navn(), " hilset ",
$other_friends[0]->vis_ant_hilsninger(), " ganger\n";
print $other_friends[1]->vis_navn(), " hilset ",
$other_friends[1]->vis_ant_hilsninger(), " ganger\n";
__END__

56
Hello2.pm Normal file

@ -0,0 +1,56 @@
# Vi prøver oss på nytt, og lager en fil som vi kaller Hello.pm
package Hello2; # Nesten som før...
sub new { # Vanlig navn på en konstruktor er "new" - ingen tvang!
my $package = shift; # første argument er alltid en referanse
# til
my $navn = shift;
my $kjonn = shift;
die "new() skal ha 2 argumenter" if @_;
die "$navn sitt kjønn må være 'M' eller 'K'! (ikke '$kjonn')\n"
unless $kjonn =~ m/^[MK]$/;
my $person = {
navn => $navn,
kjonn => $kjonn,
_ant_hils => 0 };
bless( $person, $package ); # Her knytter vi $person til
# $package, slik at vi får
# effekten av en klasse.
return $person;
}
sub hils {
my $self = shift;
my $hva = $self->{kjonn} eq "M" ? "han" : "hun";
my $hvem = $self->{navn};
$self->{_ant_hils}++; # hvor mange ganger "jeg" er blitt hilst på?
return "Nei, se! Der har vi jo $hva $hvem!\n";
}
sub vis_ant_hilsninger {
my $self = shift;
return $self->{_ant_hils};
}
sub vis_navn {
my $self = shift;
return $self->{navn};
}
sub vis_kjonn {
my $self = shift;
return $self->{kjonn};
}
1; # Så avslutter vi med en sann verdi.

25
README.md Normal file

@ -0,0 +1,25 @@
# Perl-kurs 28. og 29. april 1999
Programvareverkstedet (PVV) avslutter semesteret med å arrangere et
kurs i Perl-programmering. Kurset går over to kvelder og gir en
grunnleggende innføring i Perl. Kurset vil også gi en innføring i
oppgaver Perl er godt egnet til, samt litt om hvordan du kan lage dine
egne CGI-scripts i Perl.
Kurset vil foregå i auditorium EL5 på Gløshaugen (oppmøte i PVVs
lokaler første kveld) onsdag 28. og torsdag 29. april. Begge dager
holder vi på fra 18.30 til ca. 21.00.
Kursavgiften er kr. 30,- for medlemmer i PVV og kr. 80,- for
ikke-medlemmer, og dekker kursmateriell i form av et 20 siders
kompendium. Det er mulig å bli medlem på første kurskveld;
medlemskap koster kr. 42,- pr. år.
Påmelding gjøres per e-post innen onsdag 28. april klokken 12.00 til
adressen [kurs@pvv.ntnu.no](mailto://kurs@pvv.ntnu.no).
## Mer info om Perl
- [PERL.COM](http://www.perl.com)
- [The Perl Institute](http://www.perl.org)
- [What is Perl?](http://tpj.com/whatisperl.html)

48
navn.cgi Executable file

@ -0,0 +1,48 @@
#!/store/bin/perl -wT
#
# Et enkelt CGI-script som returnerer data du har gitt.
use strict;
use diagnostics;
use CGI_Lite;
my $cgi = new CGI_Lite; # En annen måte å lage et objekt på
$cgi->set_platform("Unix");
$cgi->add_mime_type("text/html");
my %form = $cgi->parse_form_data; # Hente inn data fra browser
$/ = undef; # Vi vil ha alt på en gang når vi leser fra en filehandle
my $page = <DATA>; # Leser fra __DATA__ nedenfor
foreach my $data_key (keys %form) {
# Bytte ut f.eks. $NAVN med $form{NAVN}
$page =~ s/\$$data_key/$form{$data_key}/gm;
}
$page =~ s/\$\w+/foo/gm;
print "Content-type: text/html\r\n\r\n";
print $page;
__DATA__
<HTML>
<HEAD><TITLE>CGI_Lite-test</TITLE></HEAD>
<BODY>
<H1>Hei, $NAVN</H1>
Du er $ALDER år gammel, har jeg hørt!
<HR>
<FORM METHOD="POST" ACTION="navn.cgi">
Navn: <INPUT TYPE="text" NAME="NAVN" VALUE="$NAVN"><BR>
Alder: <INPUT TYPE="text" NAME="ALDER" VALUE="$ALDER"><BR>
<INPUT TYPE="submit">
</FORM>
</BODY>
</HTML>

1
navn.pl Symbolic link

@ -0,0 +1 @@
navn.cgi

29
perlkurs.css Normal file

@ -0,0 +1,29 @@
A {
text-decoration: none;
}
TABLE { }
TABLE.perlcode {
font-family: "Courier" ! important;
white-space: pre;
}
TD { }
TD.perlcode {
font-family: "Courier" ! important;
white-space: pre;
width: 50%
}
PRE {
font-family: "Courier" ! important;
white-space: pre;
width: 50%
}
CODE {
font-family: "Courier" ! important;
background: #eeeeee;
}

1976
perlkurs.html Normal file

File diff suppressed because it is too large Load Diff

114
rss2html.pl Normal file

@ -0,0 +1,114 @@
#!/usr/bin/perl -w
# rss2html - converts an RSS file to HTML
# It take one argument, either a file on the local system,
# or an HTTP URL like http://slashdot.org/slashdot.rdf
# by Jonathan Eisenzopf. v1.0 19990901
# Copyright (c) 1999 internet.com Corp. All Rights Reserved.
# See http://www.webreference.com/perl for more information
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
# INCLUDES
use strict;
use XML::RSS;
use LWP::Simple;
# Declare variables
my $content;
my $file;
# MAIN
# check for command-line argument
die "Usage: rss2html.pl (<RSS file> | <URL>)\n" unless @ARGV == 1;
# get the command-line argument
my $arg = shift;
# create new instance of XML::RSS
my $rss = new XML::RSS;
# argument is a URL
if ($arg=~ /http:/i) {
$content = get($arg);
die "Could not retrieve $arg" unless $content;
# parse the RSS content
$rss->parse($content);
# argument is a file
} else {
$file = $arg;
die "File \"$file\" does't exist.\n" unless -e $file;
# parse the RSS file
$rss->parsefile($file);
}
# print the HTML channel
print_html($rss);
# SUBROUTINES
sub print_html {
my $rss = shift;
print <<HTML;
<TABLE BGCOLOR="#000000" BORDER="0" WIDTH="200"><TR><TD>
<TABLE CELLSPACING="1" CELLPADDING="4" BGCOLOR="#FFFFFF"
BORDER=0 WIDTH="100%">
<TR>
<TD VALIGN="middle" ALIGN="center" BGCOLOR="#EEEEEE"><FONT
COLOR="#000000" FACE="Arial,Helvetica"><B><A
HREF="$rss->{'channel'}->{'link'}">$rss->{'channel'}->{'title'}</A>
</B></FONT></TD></TR>
<TR><TD>
HTML
# print channel image
if ($rss->{'image'}->{'link'}) {
print <<HTML;
<CENTER>
<P><A HREF="$rss->{'image'}->{'link'}"><IMG
SRC="$rss->{'image'}->{'url'}" ALT="$rss->{'image'}->{'title'}"
BORDER="0"
HTML
print " WIDTH=\"$rss->{'image'}->{'width'}\""
if $rss->{'image'}->{'width'};
print " HEIGHT=\"$rss->{'image'}->{'height'}\""
if $rss->{'image'}->{'height'};
print "></A></CENTER><P>\n";
}
# print the channel items
foreach my $item (@{$rss->{'items'}}) {
next unless defined($item->{'title'})
&& defined($item->{'link'});
print "<LI><A HREF=\"$item->{'link'}\">".
"$item->{'title'}</A><BR>\n";
}
# if there's a textinput element
if ($rss->{'textinput'}->{'title'}) {
print <<HTML;
<FORM METHOD="GET" ACTION="$rss->{'textinput'}->{'link'}">
$rss->{'textinput'}->{'description'}<BR>
<INPUT TYPE="text" NAME="$rss->{'textinput'}->{'name'}"><BR>
<INPUT TYPE="submit" VALUE="$rss->{'textinput'}->{'title'}">
</FORM>
HTML
}
# if there's a copyright element
if ($rss->{'channel'}->{'copyright'}) {
print <<HTML;
<P><SUB>$rss->{'channel'}->{'copyright'}</SUB></P>
HTML
}
print <<HTML;
</TD>
</TR>
</TABLE>
</TD></TR></TABLE>
HTML
}