On Mon, Jul 21, 2008 at 2:11 AM, Rob Dixon <[EMAIL PROTECTED]> wrote:

>
> Tobias Eichner wrote:
> >
> > I'm currently dealing with a sample program I try to understand. Here it
> is:
> >
> > ---
> >
> > #!/usr/bin/perl
> >
> > use strict; use warnings; use diagnostics;
> >
> > # Array to sort
> > my @unsortiert = qw(Z A z a 19 91);
> >
> > # Print array to sort
> > print "@unsortiert"; print "\n";
> >
> > # Print positions of unsorted array (0 to last entry #)
> > my @pos_unsortiert = (0..$#unsortiert);
> > print "@pos_unsortiert"; print "\n";
> >
> > # Start sorting
> > my @pos_sortiert = sort({"$unsortiert[$a]" cmp "$unsortiert[$b]"}
> (0..$#unsortiert));
> >
> > print "@pos_sortiert"; print "\n";
> >
> > my @sortiert;
> > for (0..$#unsortiert)
> >     {
> >         $sortiert[$_] = $unsortiert[$pos_sortiert[$_]];
> >         print "\n$unsortiert[$_] was element $_\t\tand is now element
> $pos_sortiert[$_].";
> >         };
> > print "\n\nThis is the sorted result: @sortiert"; print "\n";
> >
> > ---
> >
> > For unknown reason sorting fails when running the program using an array
> that
> > contains numbers. I'm aware that I try here to compare numbers with the
> cmp
> > operator, but although warnings have be enabled, Perl doesn't get angry
> > about.
> >
> > So when you run this script as above, you'll notice that the sorting is
> done
> > correctly, but the positions aren't. More strangly when sorting an array
> of
> > strings only, anything is correct (soring and positions output).
> >
> > Maybe some of you can give me a hint, since I want to understand why it
> > doesn't work when using numbers ?
>
> If you were using the <=> operator to compare non-numeric strings you would
> get
> a warning, but any scalar value is a valid string so you will get no
> warnings if
> you compare numeric values with the cmp operator.
>
> Sorting numbers as strings causes them to be sorted in dictionary order,
> which
> is different from numeric order if the numbers have the same number of
> digits.
> So 2 is greater than 11 in the same way that 'B'is greater than 'AA'.
>
> I'm not clear what you mean by "the sorting is done correctly, but the
> positions
> aren't", but I hope that helps?
>
> Rob
>
>
>
>
>
> --
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> http://learn.perl.org/
>
>
>
Hi Rob

That means you want to mention that always use "cmp" instead of "<=>" for
any kind of data, numeric or non-numeric.

Regards,
Amit Saxena

Reply via email to