#!/usr/bin/perl # [c] piotao, 20070320, perl 5.8+ # http://piotao.math.univ.gda.pl/Perl/ # Program do odejmowania plikow. Odejmuje tak, jak odejmuje sie liczby: # plik1 - plik2 = to co zostanie z pliku1 gdy wspolne wiersze znikna. # Nalezy podac dwa argumenty. use strict; use warnings; # pierwszy argument umieszczamy w zmiennej $file1 (musi to byc plik) my $file1 = shift @ARGV || die "Podaj nazwe pliku!\n"; # drugi argument umieszczamy w zmiennej (moze to byc nazwa pliku lub nic, wtedy ustawione zostanie '-', # co oznacza standardowe wejscie, STDIN) my $file2 = shift @ARGV || '-'; # wczytujemy caly pierwszy plik do pamieci korzystajac z tego, ze polecenie open zwraca wartosc # powodzenia operacji my @file1 = (open F,"<$file1") ? : die "Nie moge otworzyc pliku '$file1'! $!\n"; # wczytujemy drugi plik, umieszczajac go od razu w haszu (oczywiscie nie interesuja nas powtorzone wiersze # a hasz przyda sie do szybkiego sprawdzania, czy dany wiersz jest w pliku, czy nie) my %file2 = (open F,"<$file2") ? map{($_=>undef)} : die "Nie moge otworzyc pliku '$file2'! $!\n"; # wypisujemy wiersze z pliku pierwszego, pomijajac te, ktore byly takze w pliku drugim # efekt tego bedzie taki, jakbysmy usuneli te wiersze z pliku1, ktore byly w pliku2. foreach(@file1){ print if !exists $file2{$_}; } __END__