diff options
author | Rafael Garcia-Suarez <rgarciasuarez@gmail.com> | 2002-04-30 19:03:34 +0000 |
---|---|---|
committer | Rafael Garcia-Suarez <rgarciasuarez@gmail.com> | 2002-04-30 19:03:34 +0000 |
commit | 045ac3170cd33a7002e5d26e4859e94ca400926d (patch) | |
tree | bf481b2a683c7ccbf658d60a50623597b094923e /lib/sort.pm | |
parent | e8c86ba6ca66f86dc4c8f4de0abf70f53c2484f4 (diff) | |
download | perl-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.pm | 30 |
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); |