/usr/local/CPAN/pfacter/Pfacter/processorcount.pm


package Pfacter::processorcount;

#

sub pfact {
    my $self  = shift;
    my ( $p ) = shift->{'pfact'};

    my ( $r );

    for ( $p->{'kernel'} ) {
        /AIX/ && do {
            if ( -e '/usr/sbin/lsdev' ) {
                open( F, '/usr/sbin/lsdev -Cc processor |' );
                my ( @F ) = <F>;
                close( F );

                foreach ( @F ) { $r++ if /Available/; }
            }
        };

        /FreeBSD/ && do {
            if ( -e '/sbin/dmesg' ) {
                open( F, '/sbin/dmesg |' );
                my ( @F ) = <F>;
                close( F );

                foreach ( @F ) { $r++ if /^CPU/; }
            }
        };

        /Linux/ && do {
            if ( -e '/proc/cpuinfo' ) {
                open( F, '/proc/cpuinfo' );
                my ( @F ) = <F>;
                close( F );

                foreach ( @F ) { $r++ if /processor\s+:\s+(\d+)/; }
            }
        };

        /SunOS/ && do {
            if ( -e '/usr/sbin/psrinfo' ) {
                open( F, '/usr/sbin/psrinfo |' );
                my ( @F ) = <F>;
                close( F );

                $r = scalar @F;
            }
        };

        if ( $r ) { return( $r ); }
        else      { return( 0 ); }
    }
}

1;