#!/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);