Padre::Perl - A more nuanced "Where is Perl" module than Probe::Perl


Padre documentation Contained in the Padre distribution.

Index


Code Index:

NAME

Top

Padre::Perl - A more nuanced "Where is Perl" module than Probe::Perl

DESCRIPTION

Top

Even though it has only had a single release, Probe::Perl is the "best practice" method for finding the current Perl interpreter, so that we can make a system call to a new instance of the same Perl environment.

However, during the development of Padre we have found the feature set of Probe::Perl to be insufficient.

Padre::Perl is an experimental attempt to improve on Probe::Perl and support a wider range of situations. The implementation is being contained to the Padre project until we have competently "solved" all of the problems that we care about.

GUI vs Command Line

On some operating systems, different Perl binaries need to be called based on whether the process will be executing in a graphical environment versus a command line environment.

On Microsoft Windows perl.exe is the command line Perl binary and wperl.exe is the windowing Perl binary.

On Mac OS X (Darwin) perl.exe is the command line Perl binary and wxPerl.exe is a wxWidgets-specific Perl binary.

PAR Support

PAR executables do not typically support re-invocation, and implementations that do are only a recent invention, and do not support the normal Perl flags.

Once implemented, we may try to implement support for them here as well.

FUNCTIONS

Top

perl

The perl function is equivalent to (and passes through to) the find_perl_interpreter method of Probe::Perl.

It should be used when you simply need the "current" Perl executable and don't have any special needs. The other functions should only be used once you understand your needs in more detail.

Returns the location of current perl executable, or undef if it cannot be found.

cperl

The cperl function is a Perl executable location function that specifically tries to find a command line Perl. In some situations you may critically need a command line Perl so that proper STDIN, STDOUT and STDERR handles are available.

Returns a path to a command line Perl, or undef if one cannot be found.

wxperl

The wxperl function is a Perl executable location function that specifically tries to find a windowing Perl for running wxWidgets applications. In some situations you may critically need a wxWidgets Perl so that a command line box is not show (Windows) or so that Wx starts up properly at all (Mac OS X).

Returns a path to a Perl suitable for the execution of Wx-based applications, or undef if one cannot be found.

COPYRIGHT & LICENSE

Top


Padre documentation Contained in the Padre distribution.
package Padre::Perl;

# TO DO: Merge this into Probe::Perl some day in the future when this is
#       perfected, stable and beyond reproach.

use 5.008005;
use strict;
use warnings;

# Because this is sometimes used outside the Padre codebase,
# don't put any dependencies on other Padre modules in here.

our $VERSION = '0.86';

my $perl = undef;

sub perl {

	# Find the exact Perl used to launch Padre
	return $perl if defined $perl;

	# Use the most correct method first
	require Probe::Perl;
	my $_perl = Probe::Perl->find_perl_interpreter;
	if ( defined $_perl ) {
		$perl = $_perl;
		return $perl;
	}

	# Fallback to a simpler way
	require File::Which;
	$_perl = scalar File::Which::which('perl');
	$perl  = $_perl;
	return $perl;
}

sub cperl {
	my $path = perl();

	# Cascade failure
	unless ( defined $path ) {
		return;
	}

	if ( $^O eq 'MSWin32' ) {
		if ( $path =~ s/\b(wperl\.exe)\z// ) {

			# Convert to non-GUI
			if ( -f "${path}perl.exe" ) {
				return "${path}perl.exe";
			} else {
				return "${path}wperl.exe";
			}
		}

		# Unknown, give up
		return $path;
	}

	if ( $^O eq 'darwin' ) {
		if ( $path =~ s/\b(wxPerl)\z// ) {

			# Convert to non-GUI
			if ( -f "${path}perl" ) {
				return "${path}perl";
			} else {
				return "${path}wxPerl";
			}
		}

		# Unknown, give up
		return $path;
	}

	# No distinction on this platform, or we have no idea
	return $path;
}

sub wxperl {
	my $path = perl();

	# Cascade failure
	unless ( defined $path ) {
		return;
	}

	if ( $^O eq 'MSWin32' ) {
		if ( $path =~ s/\b(perl\.exe)\z// ) {

			# Convert to GUI version if we can
			if ( -f "${path}wperl.exe" ) {
				return "${path}wperl.exe";
			} else {
				return "${path}perl.exe";
			}
		}

		# Unknown, give up
		return $path;
	}

	if ( $^O eq 'darwin' ) {
		if ( $path =~ s/\b(perl)\z// ) {

			# Convert to Wx launcher
			if ( -f "${path}wxPerl" ) {
				return "${path}wxPerl";
			} else {
				return "${path}perl";
			}
		}

		# Unknown, give up
		return $path;
	}

	# No distinction on this platform, or we have no idea
	return $path;
}

1;

# Copyright 2008-2011 The Padre development team as listed in Padre.pm.
# LICENSE
# This program is free software; you can redistribute it and/or
# modify it under the same terms as Perl 5 itself.