Moduł Scalar::Footnote
Uniwersytet Gdański - Instytut Matematyki - Zakład Informatyki - Strona domowaSpis treści
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.
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.
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.