golden hour
/usr/share/perl5
⬆️ Go Up
Upload
File/Folder
Size
Actions
AnyDBM_File.pm
2.56 KB
Del
OK
App
-
Del
OK
Archive
-
Del
OK
Attribute
-
Del
OK
AutoLoader.pm
14.66 KB
Del
OK
AutoSplit.pm
19.18 KB
Del
OK
B
-
Del
OK
Benchmark.pm
27.87 KB
Del
OK
CORE.pod
2.7 KB
Del
OK
CPAN
-
Del
OK
CPAN.pm
132.91 KB
Del
OK
Class
-
Del
OK
Compress
-
Del
OK
Config
-
Del
OK
DB.pm
18.43 KB
Del
OK
DBM_Filter
-
Del
OK
DBM_Filter.pm
14.06 KB
Del
OK
Devel
-
Del
OK
DirHandle.pm
1.52 KB
Del
OK
Dumpvalue.pm
16.5 KB
Del
OK
Encode
-
Del
OK
English.pm
4.34 KB
Del
OK
ExtUtils
-
Del
OK
File
-
Del
OK
FileCache.pm
5.44 KB
Del
OK
FileHandle.pm
6.62 KB
Del
OK
Filter
-
Del
OK
FindBin.pm
4.45 KB
Del
OK
Getopt
-
Del
OK
HTTP
-
Del
OK
I18N
-
Del
OK
IO
-
Del
OK
IPC
-
Del
OK
JSON
-
Del
OK
LWP
-
Del
OK
LWP.pm
21.15 KB
Del
OK
Locale
-
Del
OK
Log
-
Del
OK
Math
-
Del
OK
Memoize
-
Del
OK
Memoize.pm
34.4 KB
Del
OK
Module
-
Del
OK
NEXT.pm
18.05 KB
Del
OK
Net
-
Del
OK
Object
-
Del
OK
Package
-
Del
OK
Perl
-
Del
OK
PerlIO
-
Del
OK
PerlIO.pm
10.19 KB
Del
OK
Pod
-
Del
OK
Safe.pm
24.03 KB
Del
OK
Search
-
Del
OK
SelectSaver.pm
1.05 KB
Del
OK
SelfLoader.pm
16.97 KB
Del
OK
Symbol.pm
4.68 KB
Del
OK
Term
-
Del
OK
Test
-
Del
OK
Test.pm
28.13 KB
Del
OK
Text
-
Del
OK
Thread
-
Del
OK
Thread.pm
8.09 KB
Del
OK
Tie
-
Del
OK
Time
-
Del
OK
UNIVERSAL.pm
6.97 KB
Del
OK
URI
-
Del
OK
URI.pm
33.01 KB
Del
OK
Unicode
-
Del
OK
User
-
Del
OK
Version
-
Del
OK
XSLoader.pm
9.99 KB
Del
OK
_charnames.pm
29.8 KB
Del
OK
autouse.pm
4.14 KB
Del
OK
base.pm
6.37 KB
Del
OK
bigint.pm
17.44 KB
Del
OK
bignum.pm
18.23 KB
Del
OK
bigrat.pm
14.11 KB
Del
OK
blib.pm
2.04 KB
Del
OK
bytes.pm
2.96 KB
Del
OK
bytes_heavy.pl
758 B
Del
OK
charnames.pm
19.22 KB
Del
OK
deprecate.pm
3.01 KB
Del
OK
diagnostics.pm
17.96 KB
Del
OK
dumpvar.pl
14.96 KB
Del
OK
encoding
-
Del
OK
feature.pm
11.06 KB
Del
OK
fields.pm
9.28 KB
Del
OK
filetest.pm
3.91 KB
Del
OK
if.pm
1.13 KB
Del
OK
integer.pm
3.19 KB
Del
OK
less.pm
3.13 KB
Del
OK
locale.pm
2.72 KB
Del
OK
lwpcook.pod
9.05 KB
Del
OK
lwptut.pod
24.89 KB
Del
OK
open.pm
7.83 KB
Del
OK
overload
-
Del
OK
overload.pm
52.66 KB
Del
OK
overloading.pm
1.77 KB
Del
OK
perl5db.pl
302.79 KB
Del
OK
perlfaq.pm
94 B
Del
OK
pod
-
Del
OK
sigtrap.pm
7.46 KB
Del
OK
sort.pm
5.95 KB
Del
OK
strict.pm
3.84 KB
Del
OK
subs.pm
845 B
Del
OK
unicore
-
Del
OK
utf8.pm
7.6 KB
Del
OK
utf8_heavy.pl
30.1 KB
Del
OK
vars.pm
2.3 KB
Del
OK
vendor_perl
-
Del
OK
vmsish.pm
4.22 KB
Del
OK
warnings
-
Del
OK
warnings.pm
18.34 KB
Del
OK
Edit: base.pm
package base; use strict 'vars'; use vars qw($VERSION); $VERSION = '2.18'; $VERSION = eval $VERSION; # constant.pm is slow sub SUCCESS () { 1 } sub PUBLIC () { 2**0 } sub PRIVATE () { 2**1 } sub INHERITED () { 2**2 } sub PROTECTED () { 2**3 } my $Fattr = \%fields::attr; sub has_fields { my($base) = shift; my $fglob = ${"$base\::"}{FIELDS}; return( ($fglob && 'GLOB' eq ref($fglob) && *$fglob{HASH}) ? 1 : 0 ); } sub has_attr { my($proto) = shift; my($class) = ref $proto || $proto; return exists $Fattr->{$class}; } sub get_attr { $Fattr->{$_[0]} = [1] unless $Fattr->{$_[0]}; return $Fattr->{$_[0]}; } if ($] < 5.009) { *get_fields = sub { # Shut up a possible typo warning. () = \%{$_[0].'::FIELDS'}; my $f = \%{$_[0].'::FIELDS'}; # should be centralized in fields? perhaps # fields::mk_FIELDS_be_OK. Peh. As long as %{ $package . '::FIELDS' } # is used here anyway, it doesn't matter. bless $f, 'pseudohash' if (ref($f) ne 'pseudohash'); return $f; } } else { *get_fields = sub { # Shut up a possible typo warning. () = \%{$_[0].'::FIELDS'}; return \%{$_[0].'::FIELDS'}; } } sub import { my $class = shift; return SUCCESS unless @_; # List of base classes from which we will inherit %FIELDS. my $fields_base; my $inheritor = caller(0); my @bases; foreach my $base (@_) { if ( $inheritor eq $base ) { warn "Class '$inheritor' tried to inherit from itself\n"; } next if grep $_->isa($base), ($inheritor, @bases); # Following blocks help isolate $SIG{__DIE__} changes { my $sigdie; { local $SIG{__DIE__}; eval "require $base"; # Only ignore "Can't locate" errors from our eval require. # Other fatal errors (syntax etc) must be reported. die if $@ && $@ !~ /^Can't locate .*? at \(eval /; unless (%{"$base\::"}) { require Carp; local $" = " "; Carp::croak(<<ERROR); Base class package "$base" is empty. (Perhaps you need to 'use' the module which defines that package first, or make that module available in \@INC (\@INC contains: @INC). ERROR } $sigdie = $SIG{__DIE__} || undef; } # Make sure a global $SIG{__DIE__} makes it out of the localization. $SIG{__DIE__} = $sigdie if defined $sigdie; } push @bases, $base; if ( has_fields($base) || has_attr($base) ) { # No multiple fields inheritance *suck* if ($fields_base) { require Carp; Carp::croak("Can't multiply inherit fields"); } else { $fields_base = $base; } } } # Save this until the end so it's all or nothing if the above loop croaks. push @{"$inheritor\::ISA"}, @bases; if( defined $fields_base ) { inherit_fields($inheritor, $fields_base); } } sub inherit_fields { my($derived, $base) = @_; return SUCCESS unless $base; my $battr = get_attr($base); my $dattr = get_attr($derived); my $dfields = get_fields($derived); my $bfields = get_fields($base); $dattr->[0] = @$battr; if( keys %$dfields ) { warn <<"END"; $derived is inheriting from $base but already has its own fields! This will cause problems. Be sure you use base BEFORE declaring fields. END } # Iterate through the base's fields adding all the non-private # ones to the derived class. Hang on to the original attribute # (Public, Private, etc...) and add Inherited. # This is all too complicated to do efficiently with add_fields(). while (my($k,$v) = each %$bfields) { my $fno; if ($fno = $dfields->{$k} and $fno != $v) { require Carp; Carp::croak ("Inherited fields can't override existing fields"); } if( $battr->[$v] & PRIVATE ) { $dattr->[$v] = PRIVATE | INHERITED; } else { $dattr->[$v] = INHERITED | $battr->[$v]; $dfields->{$k} = $v; } } foreach my $idx (1..$#{$battr}) { next if defined $dattr->[$idx]; $dattr->[$idx] = $battr->[$idx] & INHERITED; } } 1; __END__ =head1 NAME base - Establish an ISA relationship with base classes at compile time =head1 SYNOPSIS package Baz; use base qw(Foo Bar); =head1 DESCRIPTION Unless you are using the C<fields> pragma, consider this module discouraged in favor of the lighter-weight C<parent>. Allows you to both load one or more modules, while setting up inheritance from those modules at the same time. Roughly similar in effect to package Baz; BEGIN { require Foo; require Bar; push @ISA, qw(Foo Bar); } When C<base> tries to C<require> a module, it will not die if it cannot find the module's file, but will die on any other error. After all this, should your base class be empty, containing no symbols, C<base> will die. This is useful for inheriting from classes in the same file as yourself but where the filename does not match the base module name, like so: # in Bar.pm package Foo; sub exclaim { "I can have such a thing?!" } package Bar; use base "Foo"; There is no F<Foo.pm>, but because C<Foo> defines a symbol (the C<exclaim> subroutine), C<base> will not die when the C<require> fails to load F<Foo.pm>. C<base> will also initialize the fields if one of the base classes has it. Multiple inheritance of fields is B<NOT> supported, if two or more base classes each have inheritable fields the 'base' pragma will croak. See L<fields> for a description of this feature. The base class' C<import> method is B<not> called. =head1 DIAGNOSTICS =over 4 =item Base class package "%s" is empty. base.pm was unable to require the base package, because it was not found in your path. =item Class 'Foo' tried to inherit from itself Attempting to inherit from yourself generates a warning. package Foo; use base 'Foo'; =back =head1 HISTORY This module was introduced with Perl 5.004_04. =head1 CAVEATS Due to the limitations of the implementation, you must use base I<before> you declare any of your own fields. =head1 SEE ALSO L<fields> =cut
Save