in reply to Re: Numeric Sort for Stringified Value (How to Avoid Warning)
in thread Numeric Sort for Stringified Value (How to Avoid Warning)
Your code:perl -w -MData::Dumper -e ' @old = ( "10.5 AA", "9 AC", "2 BB"); @new = sort {($b =~ /(\d+)/)[0] <=> ($a =~ /(\d+)/)[0]} @old; print Dumper \@new;
Your code is buggy as it only supports integer, what about this set of data:
use Data::Dumper; @old = ( "10.5 AA", "10.6 AA", "9 AC", "2 BB"); @new = sort {($b =~ /(\d+)/)[0] <=> ($a =~ /(\d+)/)[0]} @old; print Dumper \@new;
Your code returns
$VAR1 = [ '10.5 AA', '10.6 AA', '9 AC', '2 BB' ];
Which is wrong. Perl already does what your code is supposed to do (if it is implemented correctly). Thus your code has performance implication, as it is doing more than needed. In this particular case, I would rather trun off the warnings temperarily:
use Data::Dumper; use strict; use warnings; my @old = ( "10.5 AA", "10.6 AA", "9 AC", "2 BB"); my @new; { no warnings; @new = sort {$b <=> $a} @old; } "a" == "a"; #meaingless other than to demo the fact that the warnings +is back on print Dumper \@new;
|
|---|