Przejdę teraz do języka PERL, jest o językiem skryptowym a w składni przypomina PHP, BASHa i nie upodabniał bym go do języków Python i Ruby, bo mają one znaczącą różnice (Python i Ruby są typowo obiektowymi językami, a PERL nie). Posiada tez pewne cechy języka C, ale nie będę się za wiele w tym wypowiadał i przejdę od razu do pokazania składni.
Pierwsze co rzuciło mi się w oczy to komentarze zbudowane z wielu linii.
=comment
to jest długi komwntarz
=cut
Jest trochę podobny to Adnotacji w języku Ruby, ale rozpoczęcie komentarza jest długie i pewnie męczące - pewnie mało kto tego komentarza używa w kodzie, zwłaszcza, że podstawowy komentarz jest identyczny co ten z Basha. Następnie bez czytania, na temat PERLa przeszedłem do praktykowania z nimi tak oto powstały poniższe programy - wybrałem tylko dwa, bo sprawdzałem też i CGI w PERlu, ale to opisze następnym razem.
Program1:
#!/usr/bin/perl
use warnings; use strict;
=comment
to jest długi komwntarz
=cut
print "Start programu\n";
print "Podaj liczbe całkowita niejuemną:";
my $zm = <STDIN>;
&bity($zm);
print "Podaj dzielnik:";
my $zm1 = <STDIN>;
my $ans = &nwd($zm,$zm1);
print $ans;
sub bity {
my $zmCal = $_[0];
my $i =0;
for(; $i < $zmCal; $i++) {
$i = 2*$i + $zmCal%2;
}
print "Odwrotna kolejnosc bitów to: ", $i;
print "\n";
}
# nwd
sub nwd {
my $m = $_[0];
my $n = $_[1];
my $r; # tmp memory
# lets play
while($n) {
$r = $m % $n;
$m = $n;
$n = $r;
}
return $m;
}
Po zapoznaniu się z podstawową składnią, jak wyglądają pętle, komentarze i funkcje zrobiłem drugi program:
#!/usr/bin/perl
=comment
Aplikacja będzie przeliczac z liczby calkowitej dodatniej na adnotacje rzymską.
Do tego wykorzystam petle
=cut
use warnings; use strict;
#użyje tego :P
my @liczby = (1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1, 0) ;
#hmmm, teraz zrobię do tego algorytm
#na poczatku trzeba podac jakąs wartość :)
print "Podaj liczbe całkowita niejuemną:";
my $zm = <STDIN>;
=comment
zastanawiam sie nad sensownym rozwiazaniem
dajmy liczby: 1410, 2525
1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1
1 1 1
2 1 2 1
Wygląda na to, że trzeba to zrobić, przez dzielenie całkowite :)
=cut
print wylicz(\@liczby, $zm);
#ale to nie optymalne :(
sub wylicz {
my %rzymskie = (1000 => 'M', 900 => 'CM', 500 => 'D', 400 => 'CD', 100 => 'C',
90 => 'XC', 50 => 'L', 40 => 'XL', 10 => 'X', 9 => 'IX',
5 => 'V', 4 => 'IV', 1 => 'I');
# tak wyglada referencja o.O => dobrze, że perl nie ma wskazników :D
my $liczby2 = shift;
pop @$liczby2;
my $liczba = $_[0];
my $rest = 0;
my $rzym = "";
foreach my $zmienna (@$liczby2) {
$rest = int($liczba / $zmienna);
if($rest > 0) {
$liczba -= ($rest* $zmienna);
for(my $i = 0; $i < $rest; $i++) {
$rzym .= $rzymskie{$zmienna};
}
}
}
return $rzym;
}
Także nie jest on skomplikowany, a dodatkowo jest on nie optymalny - trudno. Przejdę teraz do krytykowania języka. Pierwsze co mnie zdziwiło to jak wygląda referencja, troszkę według mnie jest skomplikowana i mało kto by się kapnął że "\" oznacza referencję i nie ma tutaj utrapienia ze wskaźnikami, które występują w C i C+. Patrząc dalej można zauważyć dziwną zmienną: my %rzymskie
Jest to nic innego jak taka lita, zwana hashem i powiem, ma dużo zalet, ale też ma wadę - nie można jej sortować, a dane są rozmieszczone inaczej niż jak one były wprowadzane do hasha.Kończę te narzekanie i stwierdzam, że mimo wielu dziwnych wynalazków PERL jest prostym w opanowaniu językiem to że nie ma wielu rozwiązań problemów, które możemy znaleźć w innych językach, nie oznacza że nie napiszemy porządnej, wydajnej i funkcjonalnej aplikacji. Niestety kończę moje wywody na temat języka PERL i jak znajdę chwilę, to pewnie znów coś o nim napisze.
Brak komentarzy:
Prześlij komentarz