Perl/Ćwiczenie 3 odpowiedzi

A. Czytanie i zapisywanie do plików

edytuj
 open(FILE, "plik.txt") || die("error reading file!!!\n");
 @text=<FILE>;
 close FILE;
 open(PLIK1, '>', 'plik2.txt') || die("error writing file!!!\n");
 print PLIK1 "@text";
 close PLIK1;

B. Wyrażenia regularne

edytuj

Ile wierszy ma każdy rozdział

edytuj
 use strict;
 open(P1,'<','ksiazka.txt') or die ("brak pliku ksiazka");
 open(P2,'>','plik.txt') or die ('brak plku plik.txt');
 my $r = 1;     # numer rozdziału
 my $nl = 0;    # liczba wierszy w rozdziale
 foreach (<P1>){
 	if ($_ =~ /^CHAPTER\s[IVX]+/){      # w rozdziałach są rzymskie cyfry
 		if ($r != 1) {   # najpierw wyświetlamy numer rozdziału, potem ilość wierszy
                  print P2 "wierszy: $nl\n";
               }      
 		print P2 "$_";
 		$r++;
   		$nl = 0;       # nowy rozdział, zerujemy liczbę wierszy
 	}	
 	$nl++;	  # foreach wyciąga z uchwytu linię po linii. My tylko zliczamy
 }
 print P2 "wierszy: $nl\n";	 # dla ostatniego rozdziału
 close(P1);
 close(P2);

Powtarzające się słowa

edytuj

Wyjaśnić jak to działa. Skrypt znaleziony na angielskim blogu

 #!/usr/bin/perl -n00
 # dupwords.pl - find duplicate words in the input stream
 print "$ARGV: para $.: ($1)\n" 
     while /(\b(\w+)\b\s+\b\2\b)/sg;


Wykrzyknienia i pytania

edytuj

Jeśli w jednej linii są dwa pytajniki lub wykrzykniki, zliczam go jako jeden. Przerobić to!

 open(P1,'<','ksiazka.txt') or die ("brak pliku ksiazka");
 my $w = 0;
 my $p = 0;
 foreach (<P1>){
   if ($_ =~ /\?{1}/){
     $p++;
   }
   if ($_ =~ /!/){
     $w++;
   }
 }
 print "W tekscie jest $w wykrzyknień.\n";
 print "W tekscie jest $p pytań.\n";
 close(P1);


Pytania