[Chapter 7] 7.2.6 Config - Access Perl Configuration Information
Author: Larry Wall, Tom Christiansen & Randal L. Schwartz
Date: 1999-07-02T02:01:15Z

#

| Chapter 7 The Standard Perl Library |

### 7.2.6 Config - Access Perl Configuration Information

    use Config;
    if ($Config{cc} =~ /gcc/) {
        print "built by gcc\n";
    }

    use Config qw(myconfig config_sh config_vars);
    print myconfig();
    print config_sh();
    config_vars(qw(osname archname));

The Config module contains all the information that the Configure script had to figure out at Perl build time (over 450 values).[7]

> [7] Perl was written in C, not because it's a portable language, but because it's a ubiquitous language. A bare C program is about as portable as Chuck Yeager on foot.

Shell variables from the config.sh file (written by Configure) are stored in a readonly hash, `%Config`, indexed by their names. Values set to the string `"undef"` in config.sh are returned as undefined values. The Perl exists function should be used to check whether a named variable exists.

`myconfig`

  Returns a textual summary of the major Perl configuration values. See also the explanation of Perl's -V command-line switch in Chapter 6, Social Engineering.

`config_sh`

  Returns the entire Perl configuration information in the form of the original config.sh shell variable assignment script.

`config_vars(@names)`

  Prints to `STDOUT` the values of the named configuration variables. Each is printed on a separate line in the form:

      name='value';

  Names that are unknown are output as `name='UNKNOWN';`.

Here's a more sophisticated example using `%Config`:

    use Config;

    defined $Config{sig_name} or die "No sigs?";
    foreach $name (split(' ', $Config{sig_name})) {
        $signo{$name} = $i;
        $signame[$i] = $name;
        $i++;
    }

    print "signal #17 = $signame[17]\n";
    if ($signo{ALRM}) {
        print "SIGALRM is $signo{ALRM}\n";
    }

Because configuration information is not stored within the Perl executable itself, it is possible (but unlikely) that the information might not relate to the actual Perl binary that is being used to access it. The Config module checks the Perl version number when loaded to try to prevent gross mismatches, but can't detect subsequent rebuilds of the same version.

7.2.5 Carp - Generate Error Messages |  | 7.2.7 Cwd - Get Pathname of Current Working Directory