Dear list I want to sort a file which contains the following data. SUDIP,PQR,OFFICER,15000 DIPAK,ABC,CLERK,7500 CHANDAN,MNP,MANAGER,12000 WASIM,PQR,CLERK,12000 PROTIK,XYZ,MANAGER,14000 DIPAK,XYZ,ADMIN,17000
now I have written a program which will sort the file based on column 1, column 2 and column 3 use strict; use warnings; my $fname="/USERS/anadhikary/test_prog/sort.txt"; open my $DATA,'<',$fname; my @a = map { [ split "," ] } <$DATA>; close($DATA); print map { join ",", @$_ } sort { $a->[0] cmp $b->[0] or $a->[1] cmp $b->[1] or $a->[2] cmp $b->[2] } @a; This program works fine. But my question is the columns on which I am sorting is hard coded. But I want to make the program dynamic. This file has 4 columns but It can always happen that file has 15 columns and I need to sort on 8 columns among the 15 columns. Suppose the user who runs the program is passing the number of column names as an program argument (for example ./sort.pl 4 5 7 8 12 13 15). So this condition how can be implemented through this program? I have tried in the following way [anadhik...@strawberry test_prog]$ ./sort.pl 1 2 3 the code is as follows(changed part) for(my $i=0;$i<=$#ARGV;$i++){ my $val=$ARGV[$i]; $str_name.="\$a->[".$val."] cmp \$b->[".$val."] or"."\n";; } $str_name=substr($str_name,0,-3); print map { join ",", @$_ } sort { "$str_name" }...@a; ## the $str_name prints##### $a->[1] cmp $b->[1] or $a->[2] cmp $b->[2] or $a->[3] cmp $b->[3] ######################## But when I run the program this gives following error Sort subroutine didn't return a numeric value at test1.pl line 28 Please Suggest.................... Thanks & Regards Anirban Adhikary.