_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;
}