X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/7b9ef14019d3c4d1aa14641dbd421c81c2cd18a4..7a388d0f142e3d8b43db79e3c5bf5a9a8e39e355:/lib/sort.pm diff --git a/lib/sort.pm b/lib/sort.pm index e8d6446..99d9f0b 100644 --- a/lib/sort.pm +++ b/lib/sort.pm @@ -1,16 +1,15 @@ package sort; -our $VERSION = '1.02'; +our $VERSION = '2.03'; # The hints for pp_sort are now stored in $^H{sort}; older versions # of perl used the global variable $sort::hints. -- rjh 2005-12-19 -$sort::hint_bits = 0x04020000; # HINT_LOCALIZE_HH | HINT_HH_FOR_EVAL - $sort::quicksort_bit = 0x00000001; $sort::mergesort_bit = 0x00000002; $sort::sort_bits = 0x000000FF; # allow 256 different ones $sort::stable_bit = 0x00000100; +$sort::unstable_bit = 0x00000200; use strict; @@ -21,7 +20,6 @@ sub import { Carp::croak("sort pragma requires arguments"); } local $_; - no warnings 'uninitialized'; # bitops would warn $^H{sort} //= 0; while ($_ = shift(@_)) { if (/^_q(?:uick)?sort$/) { @@ -32,6 +30,7 @@ sub import { $^H{sort} |= $sort::mergesort_bit; } elsif ($_ eq 'stable') { $^H{sort} |= $sort::stable_bit; + $^H{sort} &= ~$sort::unstable_bit; } elsif ($_ eq 'defaults') { $^H{sort} = 0; } else { @@ -39,7 +38,6 @@ sub import { Carp::croak("sort: unknown subpragma '$_'"); } } - $^H |= $sort::hint_bits; } sub unimport { @@ -57,6 +55,7 @@ sub unimport { $^H{sort} &= ~$sort::sort_bits; } elsif ($_ eq 'stable') { $^H{sort} &= ~$sort::stable_bit; + $^H{sort} |= $sort::unstable_bit; } else { require Carp; Carp::croak("sort: unknown subpragma '$_'"); @@ -184,14 +183,14 @@ So now this code would be written: { use sort qw(defaults _quicksort); # force quicksort no sort "stable"; # stability not wanted my $current; - BEGIN { $current = print sort::current; } + BEGIN { $current = sort::current; } print "$current\n"; @a = sort @b; # Pragmas go out of scope at the end of the block } { use sort qw(defaults stable); # force stability my $current; - BEGIN { $current = print sort::current; } + BEGIN { $current = sort::current; } print "$current\n"; @c = sort @d; }