#!/usr/local/bin/perl
#
# Demo 6
#
# Tehtävä 1
#
# "Suora" käsittely
#
printf "Palindromi? ";
$_=<STDIN>;
chop();
s/[ ]|[.]|[,]//g;
y/a-zåäö/A-Zåäö/;
if ($_ eq (reverse($_))) {
printf "On palindromi!\n";
}
else {
printf "Ei ole palindromi!\n";
}
tai
#!/usr/local/bin/perl
#
# Demo 6
#
# Tehtävä 1
#
# Muuttujan käsittely. Huomaa "bind"-operaattorin (=~) käyttö.
# =~ -operaattori toimii sekä sijoitus ja ehto-operaattorina
# ks. man perlop
#
printf "Palindromi? ";
$a = <STDIN>;
chop($a);
$b = $a;
$b =~ s/[ ]|[.]|[,]//g;
$b =~ y/a-zåäö/A-Zåäö/;
if ($b eq (reverse($b))) {
printf "\"$a\" on palindromi!\n";
}
else {
printf "\"$a\" ei ole palindromi!\n";
}
Tehtävä 2
#!/usr/local/bin/perl
#
# Demo 6
#
# Tehtävä 2
#
while (<STDIN>) {
#poistetaan rivinvaihto
chop();
@taulu=split($ARGV[0]);
# OFS:n ($,) määrittely print-funktiolle
$,=$ARGV[0];
print sort(@taulu);
print "\n";
}
Tehtävä 3
#!/usr/local/bin/perl
#
# Demo 6
#
# Tehtävä 3
#
# Käyttäen m//g -operaattoria + pos-funktiota
#
while (<STDIN>) {
while (m/(^|[ ])[a-zåäö]/g) {
$i=pos;
$a=substr($_,0,$i-1);
$b=substr($_,$i-1,1);
$c=substr($_,$i);
$b =~ tr/a-zåäö/A-ZÅÄÖ/;
$_=$a.$b.$c;
}
print $_;
}
Tehtävä 4
#!/usr/local/bin/perl
#
# Demo 6
#
# Tehtävä 4
#
while (<>) {
$tavut+=length();
chop();
$sanat+=split(/ +| +/,$_);
}
print "$. $sanat $tavut\n"
Tehtävä 5
#!/usr/local/bin/perl
#
# Demo 6
#
# Tehtävä 5
#
open(PAL, "palkat");
while (<PAL>) {
next if ($.<2); # Aloitetaan vasta riviltä kolme
@tau=split(/ +| +/);
$tot+=$tau[2];
if ($tau[2]>$max) {$max=$tau[2];$nimi=$tau[0];}
@apu=split("-",$tau[1]);
$suunnat{$apu[0]}++;
}
printf "%-15s: %.2f mk \n", "Keskipalkka", $tot/($.-2);
printf "%-15s: %.2f mk (%s)\n", "Paras palkka", $max, $nimi;
open(SUU, "suunnat");
while (<SUU>) {
chop();
@apu=split(/ +| +/);
printf "%-15s: %d kpl\n", $apu[0]." (".$apu[1].")",$suunnat{$apu[1]};
}
close(PAL);
close(SUU);