📄 linksection.pm
字号:
require 5;package Pod::Simple::LinkSection; # Based somewhat dimly on Array::Autojoinuse strict;use Pod::Simple::BlackBox;use overload( # So it'll stringify nice '""' => \&Pod::Simple::BlackBox::stringify_lol, 'bool' => \&Pod::Simple::BlackBox::stringify_lol, # '.=' => \&tack_on, # grudgingly support 'fallback' => 1, # turn on cleverness);sub tack_on { $_[0] = ['', {}, "$_[0]" ]; return $_[0][2] .= $_[1];}sub as_string { goto &Pod::Simple::BlackBox::stringify_lol;}sub stringify { goto &Pod::Simple::BlackBox::stringify_lol;}sub new { my $class = shift; $class = ref($class) || $class; my $new; if(@_ == 1) { if (!ref($_[0] || '')) { # most common case: one bare string return bless ['', {}, $_[0] ], $class; } elsif( ref($_[0] || '') eq 'ARRAY') { $new = [ @{ $_[0] } ]; } else { Carp::croak( "$class new() doesn't know to clone $new" ); } } else { # misc stuff $new = [ '', {}, @_ ]; } # By now it's a treelet: [ 'foo', {}, ... ] foreach my $x (@$new) { if(ref($x || '') eq 'ARRAY') { $x = $class->new($x); # recurse } elsif(ref($x || '') eq 'HASH') { $x = { %$x }; } # otherwise leave it. } return bless $new, $class;}# Not much in this class is likely to be link-section specific --# but it just so happens that link-sections are about the only treelets# that are exposed to the user.1;__END__# TODO: let it be an option whether a given subclass even wants little treelets?__END__=head1 NAMEPod::Simple::LinkSection -- represent "section" attributes of L codes=head1 SYNOPSIS # a long story=head1 DESCRIPTIONThis class is not of interest to general users.Pod::Simple uses this class for representing the value of the"section" attribute of "L" start-element events. Most applicationscan just use the normal stringification of objects of this class;they stringify to just the text content of the section,such as "foo" forC<< LZ<><Stuff/foo> >>, and "bar" for C<< LZ<><Stuff/bIZ<><ar>> >>.However, anyone particularly interested in getting the full value ofthe treelet, can just traverse the content of the treeleet@$treelet_object. To wit: % perl -MData::Dumper -e "use base qw(Pod::Simple::Methody); sub start_L { print Dumper($_[1]{'section'} ) } __PACKAGE__->new->parse_string_document('=head1 L<Foo/bI<ar>baz>>') "Output: $VAR1 = bless( [ '', {}, 'b', bless( [ 'I', {}, 'ar' ], 'Pod::Simple::LinkSection' ), 'baz' ], 'Pod::Simple::LinkSection' ); But stringify it and you get just the text content: % perl -MData::Dumper -e "use base qw(Pod::Simple::Methody); sub start_L { print Dumper( '' . $_[1]{'section'} ) } __PACKAGE__->new->parse_string_document('=head1 L<Foo/bI<ar>baz>>') "Output: $VAR1 = 'barbaz';=head1 SEE ALSOL<Pod::Simple>=head1 COPYRIGHT AND DISCLAIMERSCopyright (c) 2002 Sean M. Burke. All rights reserved.This library is free software; you can redistribute it and/or modify itunder the same terms as Perl itself.This program is distributed in the hope that it will be useful, butwithout any warranty; without even the implied warranty ofmerchantability or fitness for a particular purpose.=head1 AUTHORSean M. Burke C<sburke@cpan.org>=cut
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -