in reply to Sort::Key::Natural sorting discrepancy

Hi, you don't show your desired output, but as the doc for Sort::Key::Natural says:

Note, that the sorting is case sensitive. To do a case insensitive sort you have to convert the keys explicitly

Use natkeysort() instead:

use Sort::Key::Natural qw( natkeysort ); my @list = qw(P007b_Yum P007_Yum P007B_YUM P007_YUM P007b_yum P007_yum +); say for natkeysort { lc $_ } @list;
$ perl 1202470.pl P007b_Yum P007B_YUM P007b_yum P007_Yum P007_YUM P007_yum

Hope this helps!


The way forward always starts with a minimal test.

Replies are listed 'Best First'.
Re^2: Sort::Key::Natural sorting discrepancy
by cr8josh (Sexton) on Oct 31, 2017 at 20:44 UTC

    Thanks! I was using that exact thing but my problem is that I actually want P007 first, then P007b, which is what I would expect from natural sorting (this is how Windows sorts filenames). Once I use natkeysort and force it to lowercase, it sorts backwards from what I expect. I don't understand why they would be different. This also gets the same switch of behavior:

    use feature qw( say ); use Sort::Key::Natural qw( natkeysort ); say for natkeysort {$_} qw( P007B_YUM P007_YUM ); say qw(---); say for natkeysort {$_} qw( P007b_Yum P007_Yum ); say qw(---); say for natkeysort {$_} qw( P007b_yum P007_yum );

    That gets the same switch of order.

    P007B_YUM P007_YUM --- P007_Yum P007b_Yum --- P007b_yum P007_yum

      Hm yeap, I see what you mean.

      P007b_Yum P007B_YUM P007b_yum P007_Yum P007_YUM P007_yum
      I would have expected:
      P007_yum P007_Yum P007_YUM P007b_yum P007b_Yum P007B_YUM
      Well, hopefully salva will come along soon and explain the mystery.


      The way forward always starts with a minimal test.