Moduł Scalar::Footnote

Uniwersytet Gdański - Instytut Matematyki - Zakład Informatyki - Strona domowa

Obsługa modułu Scalar::Footnote

use Data::Dumper; use Scalar::Footnote; my $obj = Foo->new; # dołącz niewidzialny przypis do $obj: $obj->Scalar::Footnote::set( my_key => 'my footnote' ); print Dumper( $obj ); # pobierz go z powrotem: my $note = $obj->Scalar::Footnote::get( 'my_key' ); print "footnote: $note\n"; # usun go: my $note = $obj->Scalar::Footnote::remove( 'my_key' );

Co to jest?

Moduł dodaje ukryte skalary do referencji.

Szczegóły

Moduł umozliwia dodawanie skalarnych przypisów do obiektu (tak naprawdę do jakiejkolwiek referencji), które są w zasadzie nie widzialne. Na przyklad przy próbie wypisania obiektu, który posiada taki przypis nie zobaczysz go wcale. my $obj = bless [qw( foo bar )], 'Foo'; $obj->Scalar::Footnote::set( 'Foo' => 'foo note' ); print Dumper( $obj ); Wypisze: $VAR1 = bless [ 'foo', 'bar' ], 'Foo'; Można oczywiście dostać się do takiego przypisu używając metody get.

Do czego dołączane sa przypisy?

Przypisy są dołączane do referencji, z której wywolujesz set_footnote. Czyli w: my $ref1; { my $ref2 = {}; $ref1 = $ref2; set_footnote( $ref2, ['a footnote'] ); } print get_footnote( $ref1 ); Przypis jest dołączany do anoniowej referencji do hasza {}, a nie do $ref2. Dlatego można dalej dostać się do tego przypisu przez $ref1 gdy $ref2 wyjdzie poza zasięg.

Przypis można dołączyć do referencji każdego rodzaju i może być nim skalar też każdego rodzaju (referencja do skalara, hasza, tablicy czy procedury).

Kiedy przypisy są niszczone?

Przypisy znikają kiedy znika referencja do której są dołączone, no chyba, że trzymasz kopię przypisu w innym miejscu. my $ref = {}; my $note = bless [qw( bar note )], 'Bar'; Scalar::Footnote::set( $ref, 'my footnote key' => $note ); $note = undef; # $note jest ciągle osiągalny przez Scalar::Footnote::get $ref = undef; # $note jest zniszczony

Metody statyczne/klasy

To nie są typowe metody klasy ale są napisane w stylu obiektowym.

$ref = Scalar::Footnote::set( $ref, $key => $footnote )
Dodaje $footnote do $ref (który musi być referencją), nadpisuje te dodane wcześniej. Umiera jeśli $ref nie jest referencją lub jeśli wystąpi jakiś błąd. Zwraca $ref jeśli wszytko ok.
$footnote = Scalar::Footnote::get( $ref, $key )
Pobiera przypis dołączony do $ref (który musi być referencją). Umiera jeśli $ref nie jest referencją lub jeśli wystąpi jakiś błąd. Zwraca $footnote lub undef jeśli nie ma takiego przypisu.
$footnote = Scalar::Footnote::remove( $ref, $key )
Usuwa przypis dołączony do $ref(który musi być referencją). Umiera jeśli $ref nie jest referencją lub jeśli wystąpi jakiś błąd. Zwraca usunięty $footnote, lub undef jeśli nie ma takiego przypisu.
$footnote_obj = Scalar::Footnote::remove_all( $ref )
Usuwa wszystkie przypisy dołączone do $ref (który musi być referencją). Umiera jeśli $ref nie jest referencją lub jeśli wystąpi jakiś błąd. Zwraca usuniety obiekt Scalar::Footnote lub undef jeśli nie było dołączonego żadnego przypisu.
$footnote_obj = Scalar::Footnote->get_footnote_object_for( $ref )
Zwraca obiekt Scalar::Footnote dołączony do $ref (który musi być referencją) lub undef jeśli nie było dołączonego żadnego przypisu. Umiera jeśli $ref nie jest referencją lub jeśli wystąpi jakiś błąd.
$footnote_obj = Scalar::Footnote->attach_new_footnote_object_to( $ref )
Tworzy nowy obiekt Scalar::Footnote i dołącza go do $ref (który musi być referencją), nadpisuje wszystkie dotychczasowe przypisy. Umiera jeśli $ref nie jest referencją lub jeśli wystąpi jakiś błąd. Zwraca nowy obiekt Scalar::Footnote.

Metody obiektu

Te metody mogą być użyte na obiektach Scalar::Footnote zwróconych przez którąś z powyższych metod. Zwracają obiekt Scalar::Footnote.

$footnote_obj->set_value_for( $key => $val )
Tak samo jak $footnotes{$key} = $val.
$val = $footnote_obj->get_value_for( $key )
Tak samo jak $footnotes{$key}.
$val = $footnote_obj->remove_value_for( $key )
Tak samo jak delete $footnotes{$key}.

Błędy

Próba sklonowanie obiektu przez Clone kończy się błędem: Don't know how to handle magic of type \37777777633 at ...

Dodatkowe informacje

Cała dokumentacja znajduje się na http://search.cpan.org/~spurkis/Scalar-Footnote-0.99_02/lib/Scalar/Footnote.pm

Autor opracowania

P.B.

Uniwersytet Gdański - Instytut Matematyki - Zakład Informatyki - Strona domowa - Perl - Wyklady
[c] Piotr Arłukowicz, materiały z tej strony udostępnione są na licencji GNU.