Przejdź do zawartości

Perl/Łańcuchy znaków

Z Wikibooks, biblioteki wolnych podręczników.
Poprzedni rozdział: Pierwszy program
Następny rozdział: Liczby

Znaki

[edytuj]

Wstęp

[edytuj]

Ciąg znaków oznaczany jest jako string, na przykład: "Hello World!". Ciągi można ograniczać używając cudzysłowów " " lub ' '. Różnice pomiędzy tymi metodami zostaną wyjaśnione później, na razie spójrzmy na przykłady stringów:

"Czesc Billy!"  #To jest string
'Czesc Billy!'  #To też jest string
"Czesc mamo!'   #ŹLE - nie można używać równocześnie " i '

Komentarze

[edytuj]

Prawdopodobnie zauważyłeś już znaczek # (hash) który oznacza komentarz. Komentarz to opis wstawiany aby łatwiej zrozumieć kod programu.

 #!/usr/bin/perl #Mówi systemowi aby użył interpretatora Perla
 
 use warnings; #włącz ostrzeżenia
 
 print "Hello World!\n";  #Pisze Hello World! i znak końca linii.

Komentarze są jednym z dobrych nawyków, ułatwiają zrozumienie dłuższych programów i nie są brane pod uwagę przez interpreter, zatem po znaku "#" możemy pisać co nam się podoba, a dla interpretera będzie to bez znaczenia.

Definicja
Komentarz - opis, który pozwala łatwiej i szybciej zrozumieć kod programu.

Chyba już wszystko jasne, powróćmy zatem do stringów:

Podwójne cudzysłowy

[edytuj]

Kiedy używasz " (tzw. podwójnego cudzysłowu), aby umieścić w programie ciąg znaków, dajesz do zrozumienia interpreterowi, że pewne wartości ma zamieniać na inne, czyli je interpretować. Może to brzmieć trochę myląco, jednak ten przykład pomoże ci zrozumieć istotę sprawy:

"Hello World!\n" 

Jeżeli umieścisz taki string w programie, po uruchomieniu nie pokaże on...

Hello World!\n

...ale pokaże "Hello World!" i przejdzie do następnej linii. Dzieje się tak dlatego, że znaczek "\n" został potraktowany jako znak specjalny. Przykładowe znaki specjalne to:

  • \n - nowa linia
  • \t - znak tabulacji
  • \b - backspace
  • \l - następna strona
  • \u - poprzednia strona
  • \a - brzęczyk systemowy

Aby program wyświetlił:

Powiedz "Perl jest fajny!".

Należy znak podwójnego cudzysłowu poprzedzić odwrotnym ukośnikiem:

print "Powiedz \"Perl jest fajny!\".\n";

Kiedy nauczysz się korzystać ze zmiennych i operacji matematycznych, zobaczysz, że wartości zmiennych mogą być automatycznie wstawione w string. Przejdźmy teraz do pojedynczych cudzysłowów.

Pojedyncze cudzysłowy

[edytuj]

Ciągi znaków w pojedynczych cudzysłowach są reprezentowane przez ' na początku i końcu tekstu. W ciągach znaków z pojedynczymi cudzysłowami nie możesz używać znaków specjalnych lub wartości zmiennych, ponieważ nie będą one automatycznie podstawiane. Zobaczmy przykład:

 #!/usr/bin/perl
 
 use warnings;
 
 print 'Hello World!\n';

Ten mały program jest bardzo podobny do poprzedniego, lecz wszystko, co jest w cudzysłowie, zostanie pokazane. To robi dużą różnicę. Zamiast wyświetlenia "Hello World!" i wstawienia nowej linii, wersja ta pokaże nam "Hello World!\n". Jak mogłeś się przekonać, wszystko co wpiszesz zostanie zinterpretowane dosłownie.

Jeśli potrzebujesz wstawić pojedynczy cudzysłów wewnątrz ciągu znaków, możesz to zrobić używając \'. Zobaczmy przykład:

  print 'Those are Mark\'s keys';

Ograniczanie inaczej

[edytuj]

Aby pozbyć się kłopotów z wstawianiem cudzysłowów w cytowanym tekście możemy zamiast znaku " albo ' użyć operatorów cytowania. q odpowiada pojedynczo cytowanemu znakowi, a qq podwójnie cytowanemu. Po operatorze następuje ogranicznik, który nie może być ani literą ani cyfrą np:


 print qq#Powiedz "Perl jest fajny!"\n#;   # to samo co print "Powiedz \"Perl jest fajny!\"\n";
 print q<Those are Mark's keys>;           # to samo co print 'Those are Mark\'s keys';

Otwarty nawias zamykamy tym samym nawiasem ale odwróconym (tj. (), <>, {}).

Drukowanie metodą <<ENDL - wyjście blokowe

[edytuj]

Pierwszą rzeczą, jaką można zauważyć jest brak cudzysłowów w tej metodzie, drugą jest to, że "ENDL" może być zastąpione przez wszystko, co ci się podoba, więc możesz mieć:

print <<costam;

Wyrażenie print <<ENDL; mówi tak naprawdę "wypisz wszystko dopóki nie zostanie napotkana linia zawierająca tylko 'ENDL'.". Oznacza to cudzysłowy i WSZYSTKO między instrukcją i linią z ENDL (lub innym wpisanym wyrażeniem). Zauważ, że nie ma spacji między << i ENDL - jeśli umieścisz tam spację, musisz też umieścić ją w końcowej linii z ENDL, ponieważ wszystko po << jest uważane za część łańcucha, który interpreter przeszukuje w poszukiwaniu końca.

print <<ENDL;
to bedzie zawarte w tekscie
sformatowane dokladnie tak
jak jest nawet w "cudzyslowach"
i wszystkim innym!
To naprawde zadziwiajace!\n
ENDL
$twojdalszykod="tutaj";

Zwróć uwagę, że ostatnie ENDL nie ma po sobie średnika. Jest to poprawna forma zakończenia całego wyrażenia. Jednakże przed ENDL musi nastąpić linia, nawet pusta, w przeciwnym wypadku pewne interpretery mogą wygenerować błędy (Activestate - Activeperl 5.8).

Zauważyłeś co stało się ze znakiem "\n"? Został on zinterpolowany. Domyślnie wyświetlanie tą metodą ma włączoną interpolację. Aby ją wyłączyć weź etykietę w pojedyncze cudzysłowy.

print <<'ENDL';
Przykładowy nudny tekst.\n
ENDL

Operatory

[edytuj]

Operatory wykonują, jak nazwa wskazuje, pewne operacje. Operatory przedstawione niżej są używane dla łańcuchów znaków.


Operator .

[edytuj]

Operator . (kropka) używany jest do łączenia ciągu znaków np.

"Hello" . "World"  # Jest tym samym co HelloWorld

Jeśli chcesz dodać spację między Hello a World możesz napisać tak:

"Hello" . " " . "World"  # Jest tym samym co Hello World

albo w ten sposób:

"Hello" . " World" # Jest tym samym co Hello World

Operator x

[edytuj]

Jest on nazywany operatorem string repetition (powtórzenia łańcucha znaków) i jest używany, aby powtarzać dany ciąg znaków. Aby go wykorzystać wstaw po lewej stronie x ciąg znaków, a po prawej stronie liczbę np.

"Hello" x 5 # Jest tym samym, co HelloHelloHelloHelloHello

To jeszcze nie koniec

[edytuj]

Nie omówiliśmy tu wszystkich operatorów. Nie powiedzieliśmy nic o operatorach porównania napisowego. Dowiemy się o tym więcej w następnych rozdziałach.

Ćwiczenia

[edytuj]
  • Napisz program, który używa operatora ., aby wyświetlić napis "Hello Sir!".
  • Napisz inny program, który używa operatora x, aby wyświetlić "HelloHelloHelloHello". Wstaw odpowiednie komentarze opisujące, jak to pracuje
  • Pobaw się trochę z podwójnymi i pojedynczymi cudzysłowami w napisach, nabierzesz dzięki temu wprawy
Poprzedni rozdział: Pierwszy program
Następny rozdział: Liczby