Recover from microbel
This commit is contained in:
commit
f46dae2dea
31
Hello.pl
Normal file
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
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
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
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
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
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
1
navn.pl
Symbolic link
@ -0,0 +1 @@
|
||||
navn.cgi
|
29
perlkurs.css
Normal file
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
1976
perlkurs.html
Normal file
File diff suppressed because it is too large
Load Diff
114
rss2html.pl
Normal file
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
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user