Moduł Pod::Usage
Uniwersytet Gdański - Instytut Matematyki - Zakład Informatyki - Strona domowaSpis treści
Co to jest?
Wyświetla wiadomość o użyciu z wbudowanego dokumentu pod
use Pod::Usage
my $message_text = "This text precedes the usage message.";
my $exit_status = 2; ## The exit status to use
my $verbose_level = 0; ## The verbose level to use
my $filehandle = \*STDERR; ## The filehandle to write to
pod2usage($message_text);
pod2usage($exit_status);
pod2usage( { -message => $message_text ,
-exitval => $exit_status ,
-verbose => $verbose_level,
-output => $filehandle } );
pod2usage( -msg => $message_text ,
-exitval => $exit_status ,
-verbose => $verbose_level,
-output => $filehandle );
pod2usage( -verbose => 2,
-noperldoc => 1 )
pod2usage wyświetli wiadomość użycia dla wywołującego skryptu (używając jego wewnętrznej dokumentacji POD) a później zakończy skrypt z pożądanym statusem zakończenia. Wiadomość wyświetlona może mieć jeden z trzech poziomów gadatliwości: Jeśli poziom gadatliwości to 0, wtedy tylko streszczenie jest wypisywane. Jeśli poziom gadatliwości to 1, wtedy streszczenie wraz z opisem (jeśli obecny) argumentów linii komend. Jeśli poziom gadatliwości to 2, wtedy cała strona podręcznika zostanie wyświetlona.
POD (Plain Old Documentation) jest to system dokumentacji 'inline' zaprojektowany przez samego Larrego Walla, służy do dokumentowania programów perlowych w wygodny i prosty sposób. Do pewnego stopnia dokumentację tę można integrować z programem perla. POD jest przez kompilator perla ignorowany. Sekwencja POD zaczyna się od dowolnego polecenia rozpoczynającego się w pierwszej kolumnie od znaku =.
O ile nie jest wyraźnie określone, domyślnie wartość zakończenia programu, poziom gadatliwości, oraz strumień wyjściowy są określane w następujący sposób:
Pomimo tego, że powyższe wydaje sie odrobinę zagmatwane, generalnie zachowuje się poprawnie w większości sytuacji. Określenie domyślniej wartości jaka ma zostać użyta jest opierana na następującej uniksowej konwencji:
pod2usage nie wymusza powyższej konwencji, ale ustawia ją jako domyślna jeśli nie sprecyzujesz inaczej. Umiejętność pod2usage() do akceptowania pojedyńczego numeru bądź też napisu do użycia jako niewinnie wyglądająca funkcja radząca sobie z wiadomościami o błędzie:
use Pod::Usage;
use Getopt::Long;
## Parse options
GetOptions("help", "man", "flag1") || pod2usage(2);
pod2usage(1) if ($opt_help);
pod2usage(-verbose => 2) if ($opt_man);
## Check for too many filenames
pod2usage("$0: Too many files given.\n") if (@ARGV > 1);
Niektórzy użytkownicy mogą czuć że powyższa skrótowość nie jest czytelna ani spójna i mogą w zamian zrobić coś bardziej w tym rodzaju:
use Pod::Usage;
use Getopt::Long;
## Parse options
GetOptions("help", "man", "flag1") || pod2usage(-verbose => 0);
pod2usage(-verbose => 1) if ($opt_help);
pod2usage(-verbose => 2) if ($opt_man);
## Check for too many filenames
pod2usage(-verbose => 2, -message => "$0: Too many files given.\n") if (@ARGV > 1);
Argumenty
Dla pod2usage powinniśmy dać albo jeden argument, albo listę argumentów odpowiadającą haszowi. Kiedy dany jest pojedyńczy argument, powinien on odpowiadać dokładnie jednemu z poniższych:
Jeśli dany jest więcej niż jeden argument wtedy zakładane jest, że cała lista argumentów to hasz. Jeśli hasz jest dostarczony (obojętnie czy jako lista czy wskaźnik) powinien zawierać jeden bądź więcej elementów z następującymi kluczami:
Tekst wiadomości która ma zostać wyświetlona przed wyświetleniem wiadomości o użyciu programu.
Pożądany status zakończenia programu który ma zostać przekazany do funkcji exit(). Powinna to być liczba całkowita, bądź też napis "NOEXIT", aby zasygnalizować, że kontora powinna zostać zwrócona beż zakończenia wywoływanego procesu.
Pożądany poziom gadatliwości który ma zostać użyty aby wypisywać wiadomości o użyciu. Jeśli ta wartość jest równa 0, wtedy jedynie paragraf SYNOPSIS (czyli jak sama nazwa wskazuje paragraf zawierający streszczenie opisu programu) z tego dokumentu pod zostanie wyświetlona. Jeśli odpowiadająca wartość wynosi 1, wtedy paragrafy SYNOPSIS, OPTIONS, ARGUMENTS (paragraf zawierający opis argumentów dostępnych w programie), bądź OPTIONS AND ARGUMENTS (paragraf zawierający opcje oraz argumenty które są dostępne w damym porogramie)zostaną wyświetlone. Jeśli odpowiadająca wartość wynosi 2 bądź więcej wtedy cała strona podręcznika zostanie wyświetlona.
Specjalny poziom gadatliwości 99 potrzebuje również określenia parametru -sections; wtedy te paragrafy zostaną wypisane.
Napis reprezentujący listę wyboru paragrafów które mają zostać wypisane kiedy opcja -verbose jest ustawiona na 99. Przykładowo "NAME|SYNOPSIS|DESCRIPTION|VERSION" , czyli odpowiedni nazwa,streszczenie,opis,wersja.
Wskaźnik do uchwytu do pliku, bądź ścieżka do pliku w którym wiadomość o użyciu ma zostać zapisana. Domyślnie jest to \*STDERR, chyba że wartość zakończenia programu jest mniejsza niż 2 (w takim przypadku domyślnie jest to \*STDOUTM).
Wskaźnik do uchwytu do pliku, bądź też ścieżka do pliku z którego wywołany skrypt powinien czytać dokumentacje pod. Domyślnie jest to plik wskazywany przez $0 ($PROGRAM_NAME dla użytkowników English.pm).
Lista ścieżek do folderów. Jeśli plik wejściowy nie istnieje, wtedy szukany w zadanych folderach (w kolejności w jakiej foldery występują na liście). Domyślnie z listy folderów wskazywanych przez $ENV{PATH}. Lista może zostać określona zarówno jako wskaźnik do tablicy, jak i napis ścieżek do folderów który używa takiego samego separatora jakiego używa $ENV{PATH}.
Domyślnie Pod::Usage wywoła perldoc kiedy -verbose >= 2 jest określone. To nie działa dobrze dla przykładu jeśli skrypt został spakowany przez PAR. Opcja -noperldoc zataja zewnętrzne wywołanie perldoc i używa prostego "formatera" tekstu Pod::Text aby przetworzyć POD.
Przykłady
- Rekomendowane użycie tego modułu:
use Getopt::Long;
use Pod::Usage;
my $man = 0;
my $help = 0;
## Parse options and print usage if there is a syntax error,
## or if usage was explicitly requested.
GetOptions('help|?' => \$help, man => \$man) or pod2usage(2);
pod2usage(1) if $help;
pod2usage(-verbose => 2) if $man;
## If no arguments were given, then allow STDIN to be used only
## if it's not connected to a terminal (otherwise print usage)
pod2usage("$0: No files given.") if ((@ARGV == 0) && (-t STDIN));
__END__
=head1 NAME
sample - Using GetOpt::Long and Pod::Usage
=head1 SYNOPSIS
sample [options] [file ...]
Options:
-help brief help message
-man full documentation
=head1 OPTIONS
=over 8
=item B<-help>
Print a brief help message and exits.
=item B<-man>
Prints the manual page and exits.
=back
=head1 DESCRIPTION
B<This program> will read the given input file(s) and do something
useful with the contents thereof.
=cut
Daje to dość schludny wynik. Bardzo przypominający standardowe zachowanie programów na platformach uniksowych.
Jak można zauważyć zapewne jest to standardowe zachowanie użytownika który pierwszy raz uruchamia program :). Niestety mało kto stara się przeczytać najpierw dokumentacje. Dopiera kiedy coś nie działa po naszej myśli zaczynamy o tym myśleć. Moduł ten zapewnia poprawne zachowanie naszego programu w takich właśnie przypadkach.
Dodatkowe informacje.
- Przydatne linki
Kontakt i informacje o autorze opracowania
Autor modułu:
Brad Appleton
Autor przekładu: MD
Numer GG: 2194164