@@ -107,8 +107,18 @@ BEGIN
107
107
" 5.39" => [ +V5_39 ],
108
108
# using 5.41 features bundle
109
109
" 5.41" => [ +V5_41 ],
110
+ # using 41 features bundle
111
+ " 41" => [ +V5_41 ],
110
112
);
111
113
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
+
112
122
my @noops = qw( postderef lexical_subs ) ;
113
123
my @removed = qw( array_base switch ) ;
114
124
@@ -134,13 +144,18 @@ BEGIN
134
144
my $cop_feature_size = $mask == 1 ? $index : $index + 1;
135
145
136
146
for (keys %feature_bundle ) {
137
- next unless / ^5\. (\d *[13579])\z / ;
138
- $feature_bundle {" 5." .($1 +1)} ||= $feature_bundle {$_ };
147
+ if (/ ^5\. (\d *[13579])\z / ) { # 5.x dev series
148
+ $feature_bundle {" 5." .($1 +1)} ||= $feature_bundle {$_ };
149
+ }
150
+ elsif (/ ^([4-9][13579]|[1-9][0-9]+[13579])\z / ) { # 41 and above
151
+ $feature_bundle {($1 +1)} ||= $feature_bundle {$_ };
152
+ }
139
153
}
154
+ delete $feature_bundle {" 5.42" }; # this one does not exist
140
155
141
156
my %UniqueBundles ; # "say state switch" => 5.10
142
157
my %Aliases ; # 5.12 => 5.11
143
- for ( sort keys %feature_bundle ) {
158
+ for ( sort as_bundles keys %feature_bundle ) {
144
159
my $value = join (' ' , sort @{$feature_bundle {$_ }});
145
160
if (exists $UniqueBundles {$value }) {
146
161
$Aliases {$_ } = $UniqueBundles {$value };
@@ -152,8 +167,7 @@ BEGIN
152
167
# start end
153
168
my %BundleRanges ; # say => ['5.10', '5.15'] # unique bundles for values
154
169
for my $bund (
155
- sort { $a eq ' default' ? -1 : $b eq ' default' ? 1 : $a cmp $b }
156
- values %UniqueBundles
170
+ sort as_bundles values %UniqueBundles
157
171
) {
158
172
next if $bund =~ / [^\d .]/ and $bund ne ' default' ;
159
173
for (@{$feature_bundle {$bund }}) {
@@ -199,7 +213,7 @@ BEGIN
199
213
die " No HINT_UNI_8_BIT defined in perl.h" unless $Uni8Bit ;
200
214
201
215
my @HintedBundles =
202
- (' default' , grep !/[^\d.]/, sort values %UniqueBundles );
216
+ (' default' , grep !/[^\d.]/, sort as_bundles values %UniqueBundles );
203
217
204
218
205
219
# ##########################################################################
@@ -246,7 +260,7 @@ sub longest {
246
260
}
247
261
print $pm " );\n\n " ;
248
262
249
- for (sort keys %Aliases ) {
263
+ for (sort as_bundles keys %Aliases ) {
250
264
print $pm
251
265
qq' \$ feature_bundle{"$_ "} = \$ feature_bundle{"$Aliases {$_ }"};\n ' ;
252
266
};
@@ -283,7 +297,7 @@ sub longest {
283
297
$: :bundle, $: :feature
284
298
.
285
299
286
- for (' default' , sort grep /\.\d [02468]/, keys %feature_bundle ) {
300
+ for (' default' , sort as_bundles grep /[02468]\z /, keys %feature_bundle ) {
287
301
$: :bundle = " :$_ " ;
288
302
$: :feature = join ' ' , @{$feature_bundle {$_ }};
289
303
write $pm ;
0 commit comments