// Edit: Przeglądałem ten tutorial i odpisałem w tym temacie przez przypadek. Sorry.
// Edit: Przeglądałem ten tutorial i odpisałem w tym temacie przez przypadek. Sorry.
Ostatnio edytowane przez kokosoko : 04-29-2009 - 17:47 Powód: Napisanie postu z złym temacie.
Witam od niedawna zacząłem uczyć się / czytać o Perlu. Przeglądając ten kurs (fajny ale niestety chyba już niekontynuowany niestety) wymundziłem taki kod do określania Klasy Ip i mam prośbę czy mógłby ktoś mi to sprawdzić i dać jakieś wskazówki co robię źle albo jak coś zrobić lepiej . Z góry dziękuje.
Kod:#!/usr/local/bin/perl -w use strict; system(CLS); my $ip = "258.0.0.1"; $ip =~ m/(\d+)\W+(\d+)\W+(\d+)\W+(\d+)/; if($1>255 or $2>255 or $3>255 or $4>255){ print "blad"; } if(($1 == 126 && $2==0 && $3==0 && $4==0) or ($1 < 126 && $1>=1 && $2>=0 && $3>=0 && $4>=0 )){ print "JEST TO KLASA A"; } if(($1>=128 && $2>=1 && $3>=0 && $4>=0) or ($1<=191 && $2<=254 && $3>=0 && $4>=0)){ print "Jest to klasa B"; } if(($1>=192 && $2>=0 && $3>=1 && $4>=0) or ($1<=223 && $2<=255 && $3<=254 && $4==0)){ print "Jest to klasa C"; }
dziala dodalem sobie printa, zeby miec pewnosc ze regex dziala i wywalilem zbedne nawiasy - tam gdzie byly zostawilem spacje[zaraz przy "or"]. aha no i elsif.Kod:#!/usr/local/bin/perl -w use strict; system(CLS); my $ip = "258.0.0.1"; $ip =~ m/(\d+)\W+(\d+)\W+(\d+)\W+(\d+)/; if($1>255 or $2>255 or $3>255 or $4>255){ print "blad, podano $ip"; } if($1 == 126 && $2==0 && $3==0 && $4==0 or $1 < 126 && $1>=1 && $2>=0 && $3>=0 && $4>=0 ){ print "JEST TO KLASA A"; } elsif($1>=128 && $2>=1 && $3>=0 && $4>=0 or $1<=191 && $2<=254 && $3>=0 && $4>=0){ print "Jest to klasa B"; } elsif($1>=192 && $2>=0 && $3>=1 && $4>=0 or $1<=223 && $2<=255 && $3<=254 && $4==0){ print "Jest to klasa C"; }
btw, podajesz sciezke linuxowa, a uzywasz CLS?
War, war never changes.
Fakt z tą ścieżką dałem ciała..skopiowałem z jakiegoś kursu ..i skoro działało to nie przywiązywałem do tego uwagi A mam pytanie to moje wyrażenienie da się zastąpić na coś w stylu,że z adresu np. 127.0.0.1 wyszukuje "." i to co jest pomiędzy "." zapisuje do zmiennej.. ?nie wiem czy dość jasno wytłumaczyłem o co mi chodziKod:m/(\d+)\W+(\d+)\W+(\d+)\W+(\d+)/
niestety nie rozumiem
War, war never changes.
To może tak...Teraz za pomocą m/(\d+)\W+(\d+)\W+(\d+)\W+(\d+)/ sprawdzam czy pasuje wzór: liczba non-word liczba....i te liczby zapisuje do zmiennych $1 $2 itd a mi chodzi o to czy można zrobić tak , że wzorem jest sama "." i zapisuje do zmiennej wszystko co nie pasuje do wzoru czyli jest różne od "." w naszym przypadku 127 itd. ...teraz jest jaśniej?
Pojedyncza kropke mozna w regexach zapisac jako \. i to oznacza doslownie kropke. Jesli chcesz zlapac adresy IP to mozesz to zrobic na przyklad tak:
/^((\d{1,3}\.){3}\d{1,3})$/ - to lapie caly IP
/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/ - to lapie 4 zmienne
Teraz musisz jedynie sprawdzic czy $1 do $4 sa w zakresie <0; 255> i wiesz czy IP jest dobry...
BTW. Wystarczy ze sprawdzisz czy sa <=255 bo \d dopasowuje cyfry, wiec nie da sie zrobic wartosci ujemnej jak na moj gust hihi :]
ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)
Pewnie masz racje wielkie dzięki. To na pewno nie koniec moich pytań co do Perla..ale wszystko w swoim czasie..Pozdrawiam.
Jesli masz pytania to pytaj - z checia odpowiem na tyle na ile wiedza pozwoli.
ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)