| Probe-Perl documentation | Contained in the Probe-Perl distribution. |
Probe::Perl - Information about the currently running perl
use Probe::Perl;
$p = Probe::Perl->new();
# Version of this perl as a floating point number
$ver = $p->perl_version();
$ver = Probe::Perl->perl_version();
# Convert a multi-dotted string to a floating point number
$ver = $p->perl_version_to_float($ver);
$ver = Probe::Perl->perl_version_to_float($ver);
# Check if the given perl is the same as the one currently running
$bool = $p->perl_is_same($perl_path);
$bool = Probe::Perl->perl_is_same($perl_path);
# Find a path to the currently-running perl
$path = $p->find_perl_interpreter();
$path = Probe::Perl->find_perl_interpreter();
# Get @INC before run-time additions
@paths = $p->perl_inc();
@paths = Probe::Perl->perl_inc();
# Get the general type of operating system
$type = $p->os_type();
$type = Probe::Perl->os_type();
# Access Config.pm values
$val = $p->config('foo');
$val = Probe::Perl->config('foo');
$p->config('foo' => 'bar'); # Set locally
$p->config_revert('foo'); # Revert
This module provides methods for obtaining information about the
currently running perl interpreter. It originally began life as code
in the Module::Build project, but has been externalized here for
general use.
Creates a new Probe::Perl object and returns it. Most methods in
the Probe::Perl packages are available as class methods, so you
don't always need to create a new object. But if you want to create a
mutable view of the Config.pm data, it's necessary to create an
object to store the values in.
Returns the Config.pm value associated with $key. If $value
is also specified, then the value is set to $value for this view of
the data. In this case, config() must be called as an object
method, not a class method.
Removes any user-assigned value in this view of the Config.pm data.
Returns the absolute path of this perl interpreter. This is actually
sort of a tricky thing to discover sometimes - in these cases we use
perl_is_same() to verify.
Returns the version of this perl interpreter as a perl-styled version
number using perl_version_to_float(). Uses $^V if your perl is
recent enough, otherwise uses $].
Formats $version as a perl-styled version number like 5.008001.
Given the name of a perl interpreter, this method determines if it has the same configuration as the one represented by the current perl instance. Usually this means it's exactly the same
Returns a list of directories in this perl's @INC path, before
any entries from use lib, $ENV{PERL5LIB}, or -I switches are
added.
Returns a generic OS type (e.g. "Unix", "Windows", "MacOS") for the given OS name. If no OS name is given it uses the value in $^O, which is the same as $Config{osname}.
Randy W. Sims <randys@thepierianspring.org>
Based partly on code from the Module::Build project, by Ken Williams <kwilliams@cpan.org> and others.
Copyright 2005 Ken Williams and Randy Sims. All rights reserved.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
| Probe-Perl documentation | Contained in the Probe-Perl distribution. |
package Probe::Perl; use vars qw( $VERSION ); $VERSION = '0.01'; use strict; # TODO: cache values derived from launching an external perl process # TODO: docs refer to Config.pm and $self->{config} use Config; use File::Spec; sub new { my $class = shift; my $data = shift || {}; return bless( $data, $class ); } sub config { my ($self, $key) = (shift, shift); if (@_) { unless (ref $self) { die "Can't set config values via $self->config(). Use $self->new() to create a local view"; } $self->{$key} = shift; } return ref($self) && exists $self->{$key} ? $self->{$key} : $Config{$key}; } sub config_revert { my $self = shift; die "Can't use config_revert() as a class method" unless ref($self); delete $self->{$_} foreach @_; } sub perl_version { my $self = shift; # Check the current perl interpreter # It's much more convenient to use $] here than $^V, but 'man # perlvar' says I'm not supposed to. Bloody tyrant. return $^V ? $self->perl_version_to_float(sprintf( "%vd", $^V )) : $]; } sub perl_version_to_float { my ($self, $version) = @_; $version =~ s/\./../; # Double up the first dot so the output has one dot remaining $version =~ s/\.(\d+)/sprintf( '%03d', $1 )/eg; return $version; } sub perl_is_same { my ($self, $perl) = @_; return `$perl -MConfig=myconfig -e print -e myconfig` eq Config->myconfig; } sub find_perl_interpreter { my $self = shift; return $^X if File::Spec->file_name_is_absolute($^X); my $exe = $self->config('exe_ext'); my $thisperl = $^X; if ($self->os_type eq 'VMS') { # VMS might have a file version at the end $thisperl .= $exe unless $thisperl =~ m/$exe(;\d+)?$/i; } elsif (defined $exe) { $thisperl .= $exe unless $thisperl =~ m/$exe$/i; } foreach my $perl ( $self->config('perlpath'), map( File::Spec->catfile($_, $thisperl), File::Spec->path() ) ) { return $perl if -f $perl and $self->perl_is_same($perl); } return; } # Determine the default @INC for this Perl sub perl_inc { my $self = shift; local $ENV{PERL5LIB}; # this is not considered part of the default. my $perl = $self->find_perl_interpreter(); my @inc = `$perl -l -e print -e for -e \@INC`; chomp @inc; return @inc; } { my %OSTYPES = qw( aix Unix bsdos Unix dgux Unix dynixptx Unix freebsd Unix linux Unix hpux Unix irix Unix darwin Unix machten Unix next Unix openbsd Unix netbsd Unix dec_osf Unix svr4 Unix svr5 Unix sco_sv Unix unicos Unix unicosmk Unix solaris Unix sunos Unix cygwin Unix os2 Unix dos Windows MSWin32 Windows os390 EBCDIC os400 EBCDIC posix-bc EBCDIC vmesa EBCDIC MacOS MacOS VMS VMS VOS VOS riscos RiscOS amigaos Amiga mpeix MPEiX ); sub os_type { my $class = shift; return $OSTYPES{shift || $^O}; } } 1; __END__