summaryrefslogtreecommitdiff
path: root/lib/sort.pm
diff options
context:
space:
mode:
authorRafael Garcia-Suarez <rgarciasuarez@gmail.com>2002-04-30 19:03:34 +0000
committerRafael Garcia-Suarez <rgarciasuarez@gmail.com>2002-04-30 19:03:34 +0000
commit045ac3170cd33a7002e5d26e4859e94ca400926d (patch)
treebf481b2a683c7ccbf658d60a50623597b094923e /lib/sort.pm
parente8c86ba6ca66f86dc4c8f4de0abf70f53c2484f4 (diff)
downloadperl-045ac3170cd33a7002e5d26e4859e94ca400926d.tar.gz
Fix bug id 20020427.004 on %^H.
Add a regression test for %^H. Change the sort pragma implementation to use a global variable instead of %^H. p4raw-id: //depot/perl@16286
Diffstat (limited to 'lib/sort.pm')
-rw-r--r--lib/sort.pm30
1 files changed, 17 insertions, 13 deletions
diff --git a/lib/sort.pm b/lib/sort.pm
index 27efbf5904..3db4777c05 100644
--- a/lib/sort.pm
+++ b/lib/sort.pm
@@ -1,8 +1,13 @@
package sort;
-our $VERSION = '1.00';
+our $VERSION = '1.01';
-$sort::hint_bits = 0x00020000; # HINT_LOCALIZE_HH, really...
+# Currently the hints for pp_sort are stored in the global variable
+# $sort::hints. An improvement would be to store them in $^H{SORT} and have
+# this information available somewhere in the listop OP_SORT, to allow lexical
+# scoping of this pragma. -- rgs 2002-04-30
+
+our $hints = 0;
$sort::quicksort_bit = 0x00000001;
$sort::mergesort_bit = 0x00000002;
@@ -17,18 +22,17 @@ sub import {
require Carp;
Carp::croak("sort pragma requires arguments");
}
- $^H |= $sort::hint_bits;
local $_;
- no warnings 'uninitialized'; # $^H{SORT} bitops would warn
+ no warnings 'uninitialized'; # bitops would warn
while ($_ = shift(@_)) {
if (/^_q(?:uick)?sort$/) {
- $^H{SORT} &= ~$sort::sort_bits;
- $^H{SORT} |= $sort::quicksort_bit;
+ $hints &= ~$sort::sort_bits;
+ $hints |= $sort::quicksort_bit;
} elsif ($_ eq '_mergesort') {
- $^H{SORT} &= ~$sort::sort_bits;
- $^H{SORT} |= $sort::mergesort_bit;
+ $hints &= ~$sort::sort_bits;
+ $hints |= $sort::mergesort_bit;
} elsif ($_ eq 'stable') {
- $^H{SORT} |= $sort::stable_bit;
+ $hints |= $sort::stable_bit;
} else {
require Carp;
Carp::croak("sort: unknown subpragma '$_'");
@@ -38,10 +42,10 @@ sub import {
sub current {
my @sort;
- if ($^H{SORT}) {
- push @sort, 'quicksort' if $^H{SORT} & $sort::quicksort_bit;
- push @sort, 'mergesort' if $^H{SORT} & $sort::mergesort_bit;
- push @sort, 'stable' if $^H{SORT} & $sort::stable_bit;
+ if ($hints) {
+ push @sort, 'quicksort' if $hints & $sort::quicksort_bit;
+ push @sort, 'mergesort' if $hints & $sort::mergesort_bit;
+ push @sort, 'stable' if $hints & $sort::stable_bit;
}
push @sort, 'mergesort' unless @sort;
join(' ', @sort);