W przypadku bardziej skomplikowanych zapytań regularnych przydaje się wiedzieć za co odpowiadają poszczególne jego fragmenty. Sztuczką pozwalają to osiągnąć jest skorzystanie z przełącznika x przy wyszukiwaniu oraz komentarzy oznaczonych zwykłym #, wieloliniowości oraz spacji (standardowo ignorowanych właśnie dzięki temu '/x’. Spójrzmy na poniższy przykład:
Nazwa pliku powinna być taka sama jak nazwa pakietu ale dodajemy rozszerzenie pm (w naszym przypadku Template.pm). Jeżeli chcemy aby jakieś moduły były użyte w kodzie modułu, umieszczamy ich nazwy po słowie package (wcześniej wpisane dotyczyły by głównego programu czyli pakietu main).
Zwyczajowo, jeżeli chcemy odwołać się do funkcji będącej w module, musimy użyć nazwy modułu, dwukropka oraz nazwy funkcji (np. my $Cos = Template::Function(a,b)). Tą kłopotliwą składnie można uprościć dzięki eksportowaniu nazw funkcji i zmiennych (u nas use Export qw(import) i tablica wyeksportowanych elementów).
Moduł zawsze musimy kończyć wartością 1. Oznaczającą że kod został poprawnie załadowany.
#! /usr/bin/perl
package Template;
use strict;
use warnings;
use Data::Dumper;
use Exporter qw(import);
our @EXPORT_OK = qw(Function);
sub Function
{
}
1
Jednym z lepszych sposobów umieszczania danych w pliku (gdy mamy dużą ich ilość) jest umieszczenie ich na końcu pliku po napisie __END__. Wtedy możemy skorzystać z wbudowanej tablicy <DATA> jak poniżej:
#! /usr/bin/perl
use strict;
use warnings;
while (<DATA>) {
print $_;
}
__END__
data1
data2
data3
data4
Problem:
W przypadku chęci mapowania dysków należy znaleźć vhost-a na podstawie numeru partycji, problem jest tylko jeden: numer ten jest w postaci szesnastkowej.
Na każdej platformie grep działa troszkę inaczej a Perl nie ;). Dlatego czasem lepiej użyć perla w skrypcie bash-a czy Korn Shella niż korzystać z grep-a. Przykład poniżej jak łatwo można szukać:
Piszę mały programik to analizy stanów serwerów więc potrzebowałem wykonać analizę w linii poleceń, jak widać poniżej, analizuję wynik polecenia ps zapisanego w pliku:
Jednym z podstawowych problemów jest walidacja danych podanych przez użytkownika do skryptu. Walidacji powinny być podane nawet opcje wywołania skryptów. Czyli powinniśmy prawdzić, czy faktycznie dana opcja, której użył użytkownik istnieje. Mój sposób na to jest prosty:
sub usage(); ## prototype of usage() function
usage() if (! GetOptions( …. ))
usage() if ($usage);
ps. tak, stworzyłem podstronę Sztuczki -> Perl, na której będę podsumowywał moje nalepsze praktyki ;). Nie jestem ekspertem ale ma to mi pozwolić lepiej zarządzać moją wiedzą…
Skrypt analizuje listę volumenów grup, następnie dla każdej grupy tworzy listę logicznych volumenów a na koniec dla każdego z nich tworzy listę fizycznych volumenów, na których się on znajduje. Wynikowa lista jest w formacie csv.
Dostępny jest na stronie z skryptami: Skrypty / scripts