Server: appserver-7f0f8755-nginx-15961cad18524ec5a9db05f2a6a7e440
Current directory: /usr/lib/x86_64-linux-gnu/perl-base
Software: nginx/1.27.5
Shell Command
Create a new file
Upload file
File: fields.pm
use 5.008; package fields; require 5.005; use strict; no strict 'refs'; unless( eval q{require warnings::register; warnings::register->import; 1} ) { *warnings::warnif = sub { require Carp; Carp::carp(@_); } } our %attr; our $VERSION = '2.24'; $VERSION =~ tr/_//d; # constant.pm is slow sub PUBLIC () { 2**0 } sub PRIVATE () { 2**1 } sub INHERITED () { 2**2 } sub PROTECTED () { 2**3 } # The %attr hash holds the attributes of the currently assigned fields # per class. The hash is indexed by class names and the hash value is # an array reference. The first element in the array is the lowest field # number not belonging to a base class. The remaining elements' indices # are the field numbers. The values are integer bit masks, or undef # in the case of base class private fields (which occupy a slot but are # otherwise irrelevant to the class). sub import { my $class = shift; return unless @_; my $package = caller(0); # avoid possible typo warnings %{"$package\::FIELDS"} = () unless %{"$package\::FIELDS"}; my $fields = \%{"$package\::FIELDS"}; my $fattr = ($attr{$package} ||= [1]); my $next = @$fattr; # Quiet pseudo-hash deprecation warning for uses of fields::new. bless \%{"$package\::FIELDS"}, 'pseudohash'; if ($next > $fattr->[0] and ($fields->{$_[0]} || 0) >= $fattr->[0]) { # There are already fields not belonging to base classes. # Looks like a possible module reload... $next = $fattr->[0]; } foreach my $f (@_) { my $fno = $fields->{$f}; # Allow the module to be reloaded so long as field positions # have not changed. if ($fno and $fno != $next) { require Carp; if ($fno < $fattr->[0]) { if ($] < 5.006001) { warn("Hides field '$f' in base class") if $^W; } else { warnings::warnif("Hides field '$f' in base class") ; } } else { Carp::croak("Field name '$f' already in use"); } } $fields->{$f} = $next; $fattr->[$next] = ($f =~ /^_/) ? PRIVATE : PUBLIC; $next += 1; } if (@$fattr > $next) { # Well, we gave them the benefit of the doubt by guessing the # module was reloaded, but they appear to be declaring fields # in more than one place. We can't be sure (without some extra # bookkeeping) that the rest of the fields will be declared or # have the same positions, so punt. require Carp; Carp::croak ("Reloaded module must declare all fields at once"); } } sub inherit { require base; goto &base::inherit_fields; } sub _dump # sometimes useful for debugging { for my $pkg (sort keys %attr) { print "\n$pkg"; if (@{"$pkg\::ISA"}) { print " (", join(", ", @{"$pkg\::ISA"}), ")"; } print "\n"; my $fields = \%{"$pkg\::FIELDS"}; for my $f (sort {$fields->{$a} <=> $fields->{$b}} keys %$fields) { my $no = $fields->{$f}; print " $no: $f"; my $fattr = $attr{$pkg}[$no]; if (defined $fattr) { my @a; push(@a, "public") if $fattr & PUBLIC; push(@a, "private") if $fattr & PRIVATE; push(@a, "inherited") if $fattr & INHERITED; print "\t(", join(", ", @a), ")"; } print "\n"; } } } if ($] < 5.009) { *new = sub { my $class = shift; $class = ref $class if ref $class; return bless [\%{$class . "::FIELDS"}], $class; } } else { *new = sub { my $class = shift; $class = ref $class if ref $class; require Hash::Util; my $self = bless {}, $class; # The lock_keys() prototype won't work since we require Hash::Util :( &Hash::Util::lock_keys(\%$self, _accessible_keys($class)); return $self; } } sub _accessible_keys { my ($class) = @_; return ( keys %{$class.'::FIELDS'}, map(_accessible_keys($_), @{$class.'::ISA'}), ); } sub phash { die "Pseudo-hashes have been removed from Perl" if $] >= 5.009; my $h; my $v; if (@_) { if (ref $_[0] eq 'ARRAY') { my $a = shift; @$h{@$a} = 1 .. @$a; if (@_) { $v = shift; unless (! @_ and ref $v eq 'ARRAY') { require Carp; Carp::croak ("Expected at most two array refs\n"); } } } else { if (@_ % 2) { require Carp; Carp::croak ("Odd number of elements initializing pseudo-hash\n"); } my $i = 0; @$h{grep ++$i % 2, @_} = 1 .. @_ / 2; $i = 0; $v = [grep $i++ % 2, @_]; } } else { $h = {}; $v = []; } [ $h, @$v ]; } 1; __END__
.
50 Items
Change directory
Remove directory
Rename directory
..
1292 Items
Change directory
Remove directory
Rename directory
AutoLoader.pm
5.36 KB
Edit
Delete
Copy
Move
Remame
Carp
1 Items
Change directory
Remove directory
Rename directory
Carp.pm
24.8 KB
Edit
Delete
Copy
Move
Remame
Config.pm
3.14 KB
Edit
Delete
Copy
Move
Remame
Config_git.pl
0.4 KB
Edit
Delete
Copy
Move
Remame
Config_heavy.pl
54.48 KB
Edit
Delete
Copy
Move
Remame
Cwd.pm
16.62 KB
Edit
Delete
Copy
Move
Remame
DynaLoader.pm
11 KB
Edit
Delete
Copy
Move
Remame
Errno.pm
4.8 KB
Edit
Delete
Copy
Move
Remame
Exporter
1 Items
Change directory
Remove directory
Rename directory
Exporter.pm
2.28 KB
Edit
Delete
Copy
Move
Remame
Fcntl.pm
2.05 KB
Edit
Delete
Copy
Move
Remame
File
6 Items
Change directory
Remove directory
Rename directory
FileHandle.pm
2.06 KB
Edit
Delete
Copy
Move
Remame
Getopt
1 Items
Change directory
Remove directory
Rename directory
Hash
1 Items
Change directory
Remove directory
Rename directory
IO
7 Items
Change directory
Remove directory
Rename directory
IO.pm
0.46 KB
Edit
Delete
Copy
Move
Remame
IPC
2 Items
Change directory
Remove directory
Rename directory
List
1 Items
Change directory
Remove directory
Rename directory
POSIX.pm
19.91 KB
Edit
Delete
Copy
Move
Remame
Scalar
1 Items
Change directory
Remove directory
Rename directory
SelectSaver.pm
0.34 KB
Edit
Delete
Copy
Move
Remame
Socket.pm
13.5 KB
Edit
Delete
Copy
Move
Remame
Symbol.pm
2.15 KB
Edit
Delete
Copy
Move
Remame
Text
3 Items
Change directory
Remove directory
Rename directory
Tie
1 Items
Change directory
Remove directory
Rename directory
XSLoader.pm
4.02 KB
Edit
Delete
Copy
Move
Remame
attributes.pm
3 KB
Edit
Delete
Copy
Move
Remame
auto
10 Items
Change directory
Remove directory
Rename directory
base.pm
8.7 KB
Edit
Delete
Copy
Move
Remame
builtin.pm
0.21 KB
Edit
Delete
Copy
Move
Remame
bytes.pm
0.48 KB
Edit
Delete
Copy
Move
Remame
bytes_heavy.pl
0.74 KB
Edit
Delete
Copy
Move
Remame
constant.pm
5.6 KB
Edit
Delete
Copy
Move
Remame
feature.pm
7.38 KB
Edit
Delete
Copy
Move
Remame
fields.pm
4.89 KB
Edit
Delete
Copy
Move
Remame
integer.pm
0.17 KB
Edit
Delete
Copy
Move
Remame
lib.pm
2.23 KB
Edit
Delete
Copy
Move
Remame
locale.pm
3.37 KB
Edit
Delete
Copy
Move
Remame
overload.pm
4.39 KB
Edit
Delete
Copy
Move
Remame
overloading.pm
0.94 KB
Edit
Delete
Copy
Move
Remame
parent.pm
0.45 KB
Edit
Delete
Copy
Move
Remame
re.pm
9.33 KB
Edit
Delete
Copy
Move
Remame
strict.pm
1.57 KB
Edit
Delete
Copy
Move
Remame
unicore
2 Items
Change directory
Remove directory
Rename directory
utf8.pm
0.33 KB
Edit
Delete
Copy
Move
Remame
vars.pm
1.12 KB
Edit
Delete
Copy
Move
Remame
warnings
1 Items
Change directory
Remove directory
Rename directory
warnings.pm
28.97 KB
Edit
Delete
Copy
Move
Remame