argra****@users*****
argra****@users*****
2012年 10月 10日 (水) 03:42:00 JST
Index: docs/modules/fields-2.14/fields.pod diff -u /dev/null docs/modules/fields-2.14/fields.pod:1.1 --- /dev/null Wed Oct 10 03:42:00 2012 +++ docs/modules/fields-2.14/fields.pod Wed Oct 10 03:42:00 2012 @@ -0,0 +1,330 @@ + +=encoding euc-jp + +=head1 NAME + +=begin original + +fields - compile-time class fields + +=end original + +fields - コンパイル時のクラスフィールド + +=head1 SYNOPSIS + + { + package Foo; + use fields qw(foo bar _Foo_private); + sub new { + my Foo $self = shift; + unless (ref $self) { + $self = fields::new($self); + $self->{_Foo_private} = "this is Foo's secret"; + } + $self->{foo} = 10; + $self->{bar} = 20; + return $self; + } + } + + my $var = Foo->new; + $var->{foo} = 42; + + # this will generate an error + $var->{zap} = 42; + + # subclassing + { + package Bar; + use base 'Foo'; + use fields qw(baz _Bar_private); # not shared with Foo + sub new { + my $class = shift; + my $self = fields::new($class); + $self->SUPER::new(); # init base fields + $self->{baz} = 10; # init own fields + $self->{_Bar_private} = "this is Bar's secret"; + return $self; + } + } + +=head1 DESCRIPTION + +=begin original + +The C<fields> pragma enables compile-time verified class fields. + +=end original + +The C<fields> pragma enables compile-time verified class fields. +(TBT) + +=begin original + +NOTE: The current implementation keeps the declared fields in the %FIELDS +hash of the calling package, but this may change in future versions. +Do B<not> update the %FIELDS hash directly, because it must be created +at compile-time for it to be fully useful, as is done by this pragma. + +=end original + +NOTE: The current implementation keeps the declared fields in the %FIELDS +hash of the calling package, but this may change in future versions. +Do B<not> update the %FIELDS hash directly, because it must be created +at compile-time for it to be fully useful, as is done by this pragma. +(TBT) + +=begin original + +B<Only valid for perl before 5.9.0:> + +=end original + +B<Only valid for perl before 5.9.0:> +(TBT) + +=begin original + +If a typed lexical variable holding a reference is used to access a +hash element and a package with the same name as the type has +declared class fields using this pragma, then the operation is +turned into an array access at compile time. + +=end original + +If a typed lexical variable holding a reference is used to access a +hash element and a package with the same name as the type has +declared class fields using this pragma, then the operation is +turned into an array access at compile time. +(TBT) + + +=begin original + +The related C<base> pragma will combine fields from base classes and any +fields declared using the C<fields> pragma. This enables field +inheritance to work properly. + +=end original + +The related C<base> pragma will combine fields from base classes and any +fields declared using the C<fields> pragma. This enables field +inheritance to work properly. +(TBT) + +=begin original + +Field names that start with an underscore character are made private to +the class and are not visible to subclasses. Inherited fields can be +overridden but will generate a warning if used together with the C<-w> +switch. + +=end original + +Field names that start with an underscore character are made private to +the class and are not visible to subclasses. Inherited fields can be +overridden but will generate a warning if used together with the C<-w> +switch. +(TBT) + +=begin original + +B<Only valid for perls before 5.9.0:> + +=end original + +B<Only valid for perls before 5.9.0:> +(TBT) + +=begin original + +The effect of all this is that you can have objects with named +fields which are as compact and as fast arrays to access. This only +works as long as the objects are accessed through properly typed +variables. If the objects are not typed, access is only checked at +run time. + +=end original + +The effect of all this is that you can have objects with named +fields which are as compact and as fast arrays to access. This only +works as long as the objects are accessed through properly typed +variables. If the objects are not typed, access is only checked at +run time. +(TBT) + + +=begin original + +The following functions are supported: + +=end original + +The following functions are supported: +(TBT) + +=over 4 + +=item new + +=begin original + +B< perl before 5.9.0: > fields::new() creates and blesses a +pseudo-hash comprised of the fields declared using the C<fields> +pragma into the specified class. + +=end original + +B< perl before 5.9.0: > fields::new() creates and blesses a +pseudo-hash comprised of the fields declared using the C<fields> +pragma into the specified class. +(TBT) + +=begin original + +B< perl 5.9.0 and higher: > fields::new() creates and blesses a +restricted-hash comprised of the fields declared using the C<fields> +pragma into the specified class. + +=end original + +B< perl 5.9.0 and higher: > fields::new() creates and blesses a +restricted-hash comprised of the fields declared using the C<fields> +pragma into the specified class. +(TBT) + +=begin original + +This function is usable with or without pseudo-hashes. It is the +recommended way to construct a fields-based object. + +=end original + +This function is usable with or without pseudo-hashes. It is the +recommended way to construct a fields-based object. +(TBT) + +=begin original + +This makes it possible to write a constructor like this: + +=end original + +This makes it possible to write a constructor like this: +(TBT) + + package Critter::Sounds; + use fields qw(cat dog bird); + + sub new { + my $self = shift; + $self = fields::new($self) unless ref $self; + $self->{cat} = 'meow'; # scalar element + @$self{'dog','bird'} = ('bark','tweet'); # slice + return $self; + } + +=item phash + +=begin original + +B< before perl 5.9.0: > + +=end original + +B< before perl 5.9.0: > +(TBT) + +=begin original + +fields::phash() can be used to create and initialize a plain (unblessed) +pseudo-hash. This function should always be used instead of creating +pseudo-hashes directly. + +=end original + +fields::phash() can be used to create and initialize a plain (unblessed) +pseudo-hash. This function should always be used instead of creating +pseudo-hashes directly. +(TBT) + +=begin original + +If the first argument is a reference to an array, the pseudo-hash will +be created with keys from that array. If a second argument is supplied, +it must also be a reference to an array whose elements will be used as +the values. If the second array contains less elements than the first, +the trailing elements of the pseudo-hash will not be initialized. +This makes it particularly useful for creating a pseudo-hash from +subroutine arguments: + +=end original + +If the first argument is a reference to an array, the pseudo-hash will +be created with keys from that array. If a second argument is supplied, +it must also be a reference to an array whose elements will be used as +the values. If the second array contains less elements than the first, +the trailing elements of the pseudo-hash will not be initialized. +This makes it particularly useful for creating a pseudo-hash from +subroutine arguments: +(TBT) + + sub dogtag { + my $tag = fields::phash([qw(name rank ser_num)], [@_]); + } + +=begin original + +fields::phash() also accepts a list of key-value pairs that will +be used to construct the pseudo hash. Examples: + +=end original + +fields::phash() also accepts a list of key-value pairs that will +be used to construct the pseudo hash. Examples: +(TBT) + + my $tag = fields::phash(name => "Joe", + rank => "captain", + ser_num => 42); + + my $pseudohash = fields::phash(%args); + +=begin original + +B< perl 5.9.0 and higher: > + +=end original + +B< perl 5.9.0 and higher: > +(TBT) + +=begin original + +Pseudo-hashes have been removed from Perl as of 5.10. Consider using +restricted hashes or fields::new() instead. Using fields::phash() +will cause an error. + +=end original + +Pseudo-hashes have been removed from Perl as of 5.10. Consider using +restricted hashes or fields::new() instead. Using fields::phash() +will cause an error. +(TBT) + +=back + +=head1 SEE ALSO + +L<base> + +=begin meta + +Translate: SHIRAKATA Kentaro <argra****@ub32*****> +Status: in progress + +=end meta + +=cut +