Mislim da ce malo ko razumeti ovaj kod zato je bolje da ga malo iskomentarisemo i pojasnimo dakle :
Code:
#!/usr/bin/perl -w #1
chomp($input = <>); #2
open FILE, "<parovi.dat" or die $!; #3
while (<FILE>) { #4
(/^$input/) && s/^.+\|// && print; #5
}
close FILE; #6
Objasnjenje :
#1 Prva inija je standardna samo sto koristi jos i -w sto ukljucuje upozorenja tj warnings. Da ne bi ulazio u objanjenja sta -w tacno znaci, ali u najkracim crtama kompajler izbacuje upozorenja ukoliko nesto nije u redu sa kodom
#2 Ova linija cita sta korisnik upisuje i odma odseca "new line" naredbom "chomp" a to sve smesta u promenljivu $input . Izostavljeno je STDIN izmedju <> jer se ono podrazumeva ako se nista ne navede
#3 Ovo je objasnjeno u prethodnoj poruci, ali da ponovimo otvaramo parovi.dat radi citanja sadrzaja u koliko nesto nije u redu ispisuje se poruka o gresci sa promenjivom $! koja sadrzi istu
#4 Petlja while(<FILE>) cita sadrzaj file-a red po red i smesta ga u promenljivu $_ (Perl favorite default, kako neki vole da je zovu)
#5 E sada najteza linija u celom kodu koja u stvari i nije toliko teska. Ali hajde da krenemo redom oerator && je u stvari AND, a kada se on iskoristi u ovakvom smislu predstavlja malo cudan nacin pisanja uslova if.
u liniji
Code:
(/^$input/) && s/^.+\|// && print;
imamo tri uslova
1) (/^$input/)
- Proverava se da li korisnicki unos odgovara pocetku stringa koji je procitan iz file-a. ^ Znaci da proveravamo pocetag stringa e sada neki ce se pitati kog stringa pa naravno onog koji je u promenljivoj $_ koja se naravno ne pise jer se podrazumeva
2) s/^.+\|//
- Brise karaktere do ravne linije i ravnu liniju, a rezultat toga se smesta u promenljivu $_, ako je promena uspesna vraca se vrednost 1. sto je jako bitno zbog operatora and (&&), u protivnom ne bi bilo ispisa
3) print
- Ispis onoga sto se nalazi u promenljivoj $_
#6 Samo zatvaramo file koji smo otvorili naravno moze i bez ovoga jer bi perl zatvorio file posle zavrsetka programa ali nije lose da budemo precizni.
Nadam se da samo malo pomoga i da je komentar potpun, koncizan i sa svim potrebnim objasnjenjima.
Jedna malo preporuka ovo je izuzetno kratko zapisivanje koda sto dokazuje da autor vlada materijom ali ujedno ovaj kod je prakticno WRITE ONLY jer je dosta tezak za onoga ko nije toliko vest u perl-u. Zato pisite vas kod citljivije jer ce i vama biti lakse da vidite sta ste hteli ako nekad budete radili reviziju vaseg koda.
:o)