_END }
close NEW or die "write error in $podtmp: $!\n";
close POD or die "read error in $pod: $!\n";
if($changes) { rename $podtmp, $pod or die "rename $podtmp $pod: $!" }
else { unlink $podtmp or die "unlink $podtmp: $!" }
}
sub produce_table($) { my $table = shift;
my @rows;
warn "TABLE $table\n"; if($table eq 'confstr') { my @names = confstr_names; foreach my $name (sort @names) { my $val = confstr $name; push @rows, [ $name, defined $val ? "'$val'" : 'undef' ] } } elsif($table eq 'sysconf') { my @names = sysconf_names; foreach my $name (sort @names) { my $val = sysconf $name; push @rows, [ $name, defined $val ? $val : 'undef' ] } } elsif($table eq 'pathconf') { my @names = pathconf_names; foreach my $name (sort @names) { my $val = pathconf __FILE__, $name; push @rows, [ $name, defined $val ? $val : 'undef' ] } } elsif($table eq 'rlimit') { my @names = rlimit_names; foreach my $name (sort @names) { my ($soft, $hard, $success) = getrlimit $name; $soft //= 'undef'; $hard //= 'undef'; push @rows, [ $name, sprintf "%-25s %s", $soft, $hard ] } } elsif($table eq 'ulimit') { my @names = ulimit_names; foreach my $name (sort @names) { my $val = $name =~ m/GET/ ? ulimit $name : '(setter)'; push @rows, [ $name, defined $val ? $val : 'undef' ] } } elsif($table eq 'math') { my $constants = $POSIX::1003::Math::EXPORT_TAGS{constants}; no strict 'refs'; foreach my $name (sort @$constants) { my $val = &{"POSIX::1003::Math::$name"}; defined $val or $val = 'undef'; push @rows, [ $name, $val ]; } } elsif($table eq 'math') { my $constants = $POSIX::1003::Math::EXPORT_TAGS{constants}; no strict 'refs'; foreach my $name (sort @$constants) { my $val = &{"POSIX::1003::Math::$name"}; defined $val or $val = 'undef'; push @rows, [ $name, $val ]; } } elsif($table eq 'signals') { my $constants = $POSIX::1003::Signals::EXPORT_TAGS{constants}; no strict 'refs'; foreach my $name (sort @$constants) { my $val = &{"POSIX::1003::Signals::$name"}; defined $val or $val = 'undef'; push @rows, [ $name, $val ]; } } elsif($table eq 'fdio') { my $constants = $POSIX::1003::FdIO::EXPORT_TAGS{constants}; no strict 'refs'; foreach my $name (sort @$constants) { my $val = &{"POSIX::1003::FdIO::$name"}; defined $val or $val = 'undef'; push @rows, [ $name, $val ]; } } elsif($table eq 'fsys') { my $constants = $POSIX::1003::FS::EXPORT_TAGS{constants}; no strict 'refs'; foreach my $name (sort @$constants) { my $val = &{"POSIX::1003::FS::$name"}; defined $val or $val = 'undef'; push @rows, [ $name, $val ]; } } elsif($table eq 'termios') { my $constants = $POSIX::1003::Termios::EXPORT_TAGS{constants}; no strict 'refs'; foreach my $name (sort @$constants) { my $val = &{"POSIX::1003::Termios::$name"}; defined $val or $val = 'undef'; push @rows, [ $name, $val ]; } } else { die "do not know how to make table $table"; }
my $longest_name = 0;
my $longest_val = 5; # at least 'undef'
for (@rows)
{ $longest_name = length $_->[0] if $longest_name < length $_->[0];
$longest_val = length $_->[1] if $longest_val < length $_->[1];
}
my @lines;
foreach (@rows)
{ my ($name, $value) = @$_;
$name .= ' ' x ($longest_name - length $name);
push @lines, " $name $value\n";
}
if($longest_name+$longest_val < 20)
{ push @lines, "\n" while @lines %3;
my $rows = @lines / 3;
my @left = splice @lines, 0, $rows;
chomp @left;
my @middle = splice @lines, 0, $rows;
chomp @middle;
my @right = @lines;
@lines = ();
push @lines, sprintf "%-21s %-21s %s"
, shift @left, shift @middle, shift @right
while @left;
}
elsif($longest_name+$longest_val < 30)
{ push @lines, "\n" if @lines %2;
my @left = splice @lines, 0, @lines/2;
chomp @left;
my @right = @lines;
@lines = ();
push @lines, sprintf "%-31s %s", shift @left, shift @right
while @left;
}
@lines;
}