@@ -107,8 +107,18 @@ BEGIN
107107 " 5.39" => [ +V5_39 ],
108108 # using 5.41 features bundle
109109 " 5.41" => [ +V5_41 ],
110+ # using 41 features bundle
111+ " 41" => [ +V5_41 ],
110112);
111113
114+ # actually, 5.9.5 ends up between 5.41 and 41
115+ sub as_bundles {
116+ $a eq ' default' ? -1 : $b eq ' default' ? 1 # default first
117+ : $a eq ' all' ? 1 : $b eq ' all' ? -1 # all last
118+ : $a =~ / \. / ? $b =~ / \. / ? $a cmp $b : -1 # 5.x in order, before
119+ : $b =~ / \. / ? 1 : $a <=> $b ; # integers in order
120+ }
121+
112122my @noops = qw( postderef lexical_subs ) ;
113123my @removed = qw( array_base switch ) ;
114124
@@ -128,13 +138,18 @@ BEGIN
128138}
129139
130140for (keys %feature_bundle ) {
131- next unless / ^5\. (\d *[13579])\z / ;
132- $feature_bundle {" 5." .($1 +1)} ||= $feature_bundle {$_ };
141+ if (/ ^5\. (\d *[13579])\z / ) { # 5.x dev series
142+ $feature_bundle {" 5." .($1 +1)} ||= $feature_bundle {$_ };
143+ }
144+ elsif (/ ^([4-9][13579]|[1-9][0-9]+[13579])\z / ) { # 41 and above
145+ $feature_bundle {($1 +1)} ||= $feature_bundle {$_ };
146+ }
133147}
148+ delete $feature_bundle {" 5.42" }; # this one does not exist
134149
135150my %UniqueBundles ; # "say state switch" => 5.10
136151my %Aliases ; # 5.12 => 5.11
137- for ( sort keys %feature_bundle ) {
152+ for ( sort as_bundles keys %feature_bundle ) {
138153 my $value = join (' ' , sort @{$feature_bundle {$_ }});
139154 if (exists $UniqueBundles {$value }) {
140155 $Aliases {$_ } = $UniqueBundles {$value };
@@ -146,8 +161,7 @@ BEGIN
146161 # start end
147162my %BundleRanges ; # say => ['5.10', '5.15'] # unique bundles for values
148163for my $bund (
149- sort { $a eq ' default' ? -1 : $b eq ' default' ? 1 : $a cmp $b }
150- values %UniqueBundles
164+ sort as_bundles values %UniqueBundles
151165) {
152166 next if $bund =~ / [^\d .]/ and $bund ne ' default' ;
153167 for (@{$feature_bundle {$bund }}) {
@@ -193,7 +207,7 @@ BEGIN
193207die " No HINT_UNI_8_BIT defined in perl.h" unless $Uni8Bit ;
194208
195209my @HintedBundles =
196- (' default' , grep !/[^\d.]/, sort values %UniqueBundles );
210+ (' default' , grep !/[^\d.]/, sort as_bundles values %UniqueBundles );
197211
198212
199213# ##########################################################################
@@ -240,7 +254,7 @@ sub longest {
240254}
241255print $pm " );\n\n " ;
242256
243- for (sort keys %Aliases ) {
257+ for (sort as_bundles keys %Aliases ) {
244258 print $pm
245259 qq' \$ feature_bundle{"$_ "} = \$ feature_bundle{"$Aliases {$_ }"};\n ' ;
246260};
@@ -277,7 +291,7 @@ sub longest {
277291$: :bundle, $: :feature
278292.
279293
280- for (' default' , sort grep /\.\d [02468]/, keys %feature_bundle ) {
294+ for (' default' , sort as_bundles grep /[02468]\z /, keys %feature_bundle ) {
281295 $: :bundle = " :$_ " ;
282296 $: :feature = join ' ' , @{$feature_bundle {$_ }};
283297 write $pm ;
0 commit comments