The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package P9Y::ProcessTable::Table;

our $AUTHORITY = 'cpan:BBYRD'; # AUTHORITY
our $VERSION = '1.08'; # VERSION

#############################################################################
# Modules

use strict;
use warnings;

use Module::Runtime ();
use Path::Class ();

use Moo;

# Figure out which OS role we should consume
my %OS_TRANSLATE = (
   cygwin => 'MSWin32',
);

my $role_base = 'P9Y::ProcessTable::Role::Table::';
my $role      = 'OS::'.($OS_TRANSLATE{$^O} || $^O);

$@ = '';
my $has_os_role = eval { Module::Runtime::require_module($role_base.$role) };
die $@ if $@ and $@ !~ /^Can't locate /;

unless ($has_os_role) {
   # let's hope they have /proc
   if ( -d '/proc' and @{[ glob('/proc/*') ]} ) { $role = 'ProcFS'; }
   # ...or that Proc::ProcessTable can handle it
   else                                         { $role = 'PPT'; }
}

# This here first, so that it gets overloaded
extends 'P9Y::ProcessTable::Table::Base';

with $role_base.$role;

use P9Y::ProcessTable::Process;

42;