in reply to Re: Sort undef
in thread Sort undef
> wait this might go wrong if cmp_undef("",undef) returns 0. (Not sure)
actually it works undef is not cast to "" and hence less than empty string°
but it seems you didn't sue strictures, that's why I needed to add no warnings 'uninitialized';
> So you'd need to treat the 3 extra cases for $a, $b being undef and return -1,0,1 accordingly.
see cmp_undef2 for that solution
use strict; use warnings; use Data::Dump; sub cmp_undef1 { return $a cmp $b if defined $a and defined $b; no warnings 'uninitialized'; return $b cmp $a; # invert order otherwise } sub cmp_undef2 { if (defined $a) { if (defined $b) { $a cmp $b; } else { -1 } } else { if (defined $b) { 1 } else { 0 } } } my @array =( (undef)x 3, qw/c b a/, ("")x3); my @result = sort cmp_undef1 @array; dd \@result; @result = sort cmp_undef2 @array; dd \@result;
output
["", "", "", "a", "b", "c", undef, undef, undef] ["", "", "", "a", "b", "c", undef, undef, undef]
I don't want to elaborate on the sort SUBNAME LIST syntax see sort for details and other variations. (TIMTOWTDI I chose the shortest)
Cheers Rolf
(addicted to the Perl Programming Language and ☆☆☆☆ :)
Je suis Charlie!
°) which is strange because
DB<1> p "" eq undef 1
|
---|
Replies are listed 'Best First'. | |
---|---|
Re^3: Sort undef
by choroba (Cardinal) on Jun 12, 2017 at 13:55 UTC | |
by LanX (Saint) on Jun 12, 2017 at 14:18 UTC | |
Re^3: Sort undef
by AnomalousMonk (Archbishop) on Jun 12, 2017 at 15:44 UTC |
In Section
Seekers of Perl Wisdom