# use warnings; Pulls in Carp
# use vars pulls in Carp
+sub bincompat_options {
+ return sort split ' ', (Internals::V())[0];
+}
+
+sub non_bincompat_options {
+ return sort split ' ', (Internals::V())[1];
+}
+
+sub compile_date {
+ return (Internals::V())[2]
+}
+
+sub local_patches {
+ my (undef, undef, undef, @patches) = Internals::V();
+ return @patches;
+}
+
sub _V {
my ($bincompat, $non_bincompat, $date, @patches) = Internals::V();
ENDOFBEG
-my $myver = sprintf "%vd", $^V;
+my $export_funcs = <<'EOT';
+my %Export_Cache = (myconfig => 1,
+ config_sh => 1, config_vars => 1, config_re => 1,
+ bincompat_options => 1, non_bincompat_options => 1,
+ compile_date => 1, local_patches => 1);
+EOT
-$config_txt .= sprintf <<'ENDOFBEG', ($myver) x 3;
+my %export_ok = eval $export_funcs or die;
+
+$config_txt .= sprintf << 'EOT', $export_funcs;
# This file was created by configpm when Perl was built. Any changes
# made to this file will be lost the next time perl is built.
use strict;
# use warnings; Pulls in Carp
# use vars pulls in Carp
+
+# Skip @Config::EXPORT because it only contains %%Config, which we special
+# case below as it's not a function. @Config::EXPORT won't change in the
+# lifetime of Perl 5.
+%s
@Config::EXPORT = qw(%%Config);
-@Config::EXPORT_OK = qw(myconfig config_sh config_vars config_re);
+@Config::EXPORT_OK = keys %%Export_Cache;
# Need to stub all the functions to make code such as print Config::config_sh
# keep working
-sub myconfig;
-sub config_sh;
-sub config_vars;
-sub config_re;
+EOT
-# Skip @Config::EXPORT because it only contains %%Config, which we special
-# case below as it's not a function. @Config::EXPORT won't change in the
-# lifetime of Perl 5.
-my %%Export_Cache = map {($_ => 1)} @Config::EXPORT_OK;
+$config_txt .= "sub $_;\n" foreach sort keys %export_ok;
+my $myver = sprintf "%vd", $^V;
+
+$config_txt .= sprintf <<'ENDOFBEG', ($myver) x 3;
our %%Config;
# Define our own import method to avoid pulling in the full Exporter:
Names which are unknown are output as C<name='UNKNOWN';>.
See also C<-V:name> in L<perlrun/Switches>.
+=item bincompat_options()
+
+Returns a list of C pre-processor options used when compiling this F<perl>
+binary, which affect its binary compatibility with extensions.
+C<bincompat_options()> and C<non_bincompat_options()> are shown together in
+the output of C<perl -V> as I<Compile-time options>.
+
+=item non_bincompat_options()
+
+Returns a list of C pre-processor options used when compiling this F<perl>
+binary, which do not affect binary compatibility with extensions.
+
+=item compile_date()
+
+Returns the compile date (as a string), equivalent to what is shown by
+C<perl -V>
+
+=item local_patches()
+
+Returns a list of the names of locally applied patches, equivalent to what
+is shown by C<perl -V>.
+
=back
=head1 EXAMPLE