Perl och reguljära uttryck Mer reguljära uttryck Exempel Perl

Mer reguljära uttryck
Perl och reguljära uttryck
foo!
.! !
!
!
ordet foo
vilket tecken som helst
a*!!
!
noll eller flera av bokstaven a
.*!!
!
noll eller flera av vilket tecken som helst
a+!!
!
ett eller flera av bokstaven a
a?!!
!
(foo)+!!
noll eller ett av bokstaven a
en eller flera förekomster av strängen "foo”
foo|bar!
[ ab ]!!
strängen "foo" eller "bar”
bokstaven a eller bokstaven b
[ a-e ]!
någon av bokstäverna a, b, c, d eller e
[ ^a ]!!
[ -a ]!!
något tecken som inte är bokstaven a
något av tecknet minus eller bokstaven a
^a!!
a$!!
bokstaven a först på en rad
bokstaven a sist på en rad
!
!
a{3}! !
aaa
Exempel
Perl
! Varför Perl?
\.bak$
! Som jag sa på förra lektionen vi pratade om skripts så kan man
visserligen göra en hel del med hjälp av scripts skrivna för sh men
tyvärr så blir det ganska bökigt eftersom man måste använda en massa
olika program för att få en sak gjord. Det innebär att man måste kunna
syntaxen för flera olika program för att det ska fungera ... jobbigt.
\.c$|\.h$
[0-9]{6}-[0-9]{4}
! Vad är Perl?
^item[0123456789]*$
! Perl är ett programmeringsspråk och ett program. Det trevliga med
Perl att det innehåller det mesta av funktionaliteten i sed, awk, sh, etc
etc, så man behöver bara lära mig en syntax istället för flera.
[yY][eE][sS]
[^0-9]
^[+-]?(\d+\.\d+|\d+\.|\.\d+|\d+)([eE][+-]?\d+)?$
Variabler
! Det finns flera olika typer av variabler. Typerna
bestäms genom ett prefix, tex $, @ och %.
! Skalära variabler
! Detta är vanliga variabler och de kan innehålla olika typer av
information. Som prefix så används $.
! Skalära värden kan vara antingen strängar, heltal eller flyttal.
Perl kommer automatiskt konvertera mellan de olika typerna.
! Arrayer
! Det finns också arrayer, de använder prefixet @. De fungerar
som vanliga arrayer och används som vanliga arrayer.
@hello = ("one","two","three");
print @hello;
print "\n";
print $hello[2] . "\n";
Variabler forts.
! Hashtabeller (eller associative tabeller)
! En otroligt nyttig datastruktur är hash tabeller
(kallades förut 'associativa arrayer' numera är
benämningen 'hash'). De användare prefixet %.
Exempel:
%snutt =("hej","two","three","four","five","six");
printf "Exempel $snutt{'three'}\n";
# Ger utskriften 'Exempel four’
! Otroligt nyttig datastruktur.
Olika 'namespaces’
$hello = "Hej";
@hello = ("one","two","three","four");
%hello = ("five","six","seven","eight");
print $hello;print "\n";
print @hello;print "\n";
print %hello;print "\n";
# Utskriften
Speciella variabler
! I Perl finns det ett stort antal speciella variabler, så pass många
att man inte kommer ihåg dem om man inte programmerar
Perl konstant. Några exempel är:
! $_
! Default string. Den sträng som används om ingen annan anges
! @ARGV
! En array som innehåller parametrarna till scriptet
! @_
# Hej
! Innehåller parametrarna i ett funktionsanrop
! %ENV
# onetwothreefour
! En hashtabell med alla omgivningsvariabler
# seveneightfivesix
if
$xfile = 56;
$yfile = 100;
if($xfile == $yfile){
print "De är lika\n";
} else {
print "De är olika\n";
}
! Resultatet då man kör är:De är olika
while
$xfile = 90;
$yfile = 100;
while($yfile > $xfile++) {
print "\$yfile = $yfile, \$xfile = $xfile\n";
}
! Detta ger resultatet
$yfile = 100, $xfile = 91
$yfile = 100, $xfile = 92
$yfile = 100, $xfile = 93
$yfile = 100, $xfile = 94
$yfile = 100, $xfile = 95
$yfile = 100, $xfile = 96
$yfile = 100, $xfile = 97
$yfile = 100, $xfile = 98
foreach forts.
foreach
@example = ("one","two","three");
foreach $val ( @example ){
printf "Ord: %s\n", $val;
}
! Utskriften blir:
Ord: one
Ord: two
Ord: three
$x_f{'d_one'} = 'v_one';
$x_f{'d_two'} = 'v_two';
$x_f{'d_three'} = 'v_three';
print %x_f; print "\n";
foreach $keyval ( keys %x_f ){
printf "Nyckel : $keyval
värde : $x_f{$keyval}\n";
}
foreach $keyval ( sort (keys %x_f) ){
printf "Nyckel : $keyval
värde : $x_f{$keyval}\n";
}
d_threev_threed_twov_twod_onev_one
Nyckel : d_three
värde : v_three
Nyckel : d_two
värde : v_two
Nyckel : d_one
värde : v_one
Nyckel : d_one
värde : v_one
Nyckel : d_three
Nyckel : d_two
värde : v_three
värde : v_two
Strängar
Filer och filehandles
! Det som är lite speciellt med strängar är att man måste använda
speciella operatorer för att jämföra dem:
! Filer öppnas mha funktionen open.
Jämförelse!
Numerisk!
Sträng!
Returvärde
open(OUTFILE, ">output.txt") or die "Can't open output.txt: $!";
Lika!
$a == $b!
$a eq $b!
Sant om $a är lika $b
open(LOGFILE, ">>my.log")
Olika!
$a != $b!
$a neq $b!
Sant om $a är skilt från $b
! Läsning från filen kan göras mha operatorn "<>"
Mindre än!
$a < $b!
$a lt $b!
Sant om $a är mindre än $b
my $line
Större än!
$a > $b!
$a gt $b!
Sant om $a är större än $b
my @lines = <INFILE>; #läser in hela filen
Mindre eller lika!
$a <= $b!
$a le $b!
Sant om $a är mindre än
! Efter användning bör filerna stängas
!
!
!
eller lika med $b
$a >= $b!
$a ge $b!
Sant om $a är större än eller
!
Större eller lika!
!
!
!
lika med $b
Jämförelse!
!
$a <=> $b!
$a cmp $b!
0!om de är lika, 1 om $a är
!
!
!
större, -1 of $b är större
!
open(INFILE,
"input.txt")
! vill man söka i en annan sträng än $_ anges detta mha
operatorn =~
Ex:
$hej = "750510-8550";
if ($hej =~ /([0-9]{6}-[0-9]{4})/)
{
print "Personnummret var $1\n";
or die "Can't open logfile: $!";
= <INFILE>; #läser in en rad
close(INFILE);
Sökning
! vi kan söka mha reguljära uttryck genom att innesluta
dessa i //
or die "Can't open input.txt: $!";
Byta ut delar av strängar
! Görs mha s///
! Exempel:
$string1 = "I love to eat apples all day. I
can eat apples every day! Apples are
yummy!";
$string1 =~ s/apples/oranges/g;
print "The resulting value is : $string1
\n";
}
Funktioner
! Man kan deklarara sub-rutiner med hjälp av nyckelordet ''sub”
$example = demo_func("en parameter");
printf "Resultat: $example\n";
sub demo_func{
my $test = $_[0];
$test =~ tr/ae/AE/;
return $test;
}
! Resultatet blir då:
Resultat: En pArAmEtEr
Funktioner
$secondExample = switch_case("lower case
and UPPER CASE");
printf "Resultat: $secondExample\n";
sub switch_case{
my $test = $_[0];
$test =~ tr/a-zA-Z/A-Za-z/;
return $test;
}
! Resultat:
Resultat: LOWER CASE AND upper case
Mer info
! Om perl
! Prova ”man perl” faktiskt en riktigt bra man-sida
(gå sedan vidare till respektive delavsnitt)
! Om perl funktioner
! perldoc -f funktionsnamn
! Och som alltid så kan man alltid kolla...
! www