linux poison RSS
linux poison Email

Perl Script: Sorting an Array

The Perl sort function sorts a string ARRAY by an ASCII numeric value and numbers using alphanumerical order and returns the sorted list value.

The problem is that capital letters have a lower ASCII numeric value than the lowercase letters so the words beginning with capital letters will be shown first, so in order to get the desire result we need to do something else to this default sort functionality provide by the Perl.

The Perl sort function uses two operators: cmp and <=>, you can use the cmp (string comparison operator) or <=> (the numerical comparison operator) and also uses two special variables $a and $b are compared in pairs by sort to determine how to order the list.

Below is simple Perl script which demonstrate the usage of the sort functionality of Perl, feel free to copy and use this script.

Source: cat sortarray.pl
#!/bin/usr/perl

@string_array = ("Foo", "loo", "Boo", "zoo", "Moo", "hoO", "GOo", "Poo");
@sorted_stringarray = sort (@string_array);
print "This is defaul sort : ", join(", ", @sorted_stringarray), "\n";

@sorted_stringarray = ();
@sorted_stringarray = sort ({lc($a) cmp lc($b)} @string_array);
print "This is what we want: ", join(", ", @sorted_stringarray), "\n";

print " -------- Numbers Sorting ------ \n";
@number = (14, 33, 2, 10, 1, 20);
@sorted_number = sort (@number);
print "This is default sort : " , join (", ", @sorted_number), "\n";
@sorted_number = ();
@sorted_number = sort ({$a <=> $b} @number);
print "This is what we want : " , join (", ", @sorted_number), "\n";

Outut: perl sortarray.pl
This is defaul sort : Boo, Foo, GOo, Moo, Poo, hoO, loo, zoo
This is what we want: Boo, Foo, GOo, hoO, loo, Moo, Poo, zoo
 -------- Numbers Sorting ------
This is default sort : 1, 10, 14, 2, 20, 33
This is what we want : 1, 2, 10, 14, 20, 33





0 comments:

Post a Comment

Related Posts with Thumbnails