Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

I need to sort an array that is filled with numbers by their value (numerically). This attempt errors out. Suggestions?
print join(" ", (sort $a <=> $b @char_count));

Replies are listed 'Best First'.
Re: sorting array of numbers by value
by sulfericacid (Deacon) on Mar 28, 2006 at 23:18 UTC
    print join(" ", sort {$a <=> $b} @char_count);


    "Age is nothing more than an inaccurate number bestowed upon us at birth as just another means for others to judge and classify us"

    sulfericacid
Re: sorting array of numbers by value
by GrandFather (Saint) on Mar 29, 2006 at 00:16 UTC

    Read the error message. The error produced is:

    Array found where operator expected at noname.pl line 6, at end of lin +e (Missing operator before ?) syntax error at noname.pl line 6, near "$b @char_count" Execution of noname.pl aborted due to compilation errors.

    then read the documentation.

    Note too that use diagnostics; can help understand what is going on. Adding diagnostics gives the following message:

    Array found where operator expected at noname.pl line 7, at end of lin +e (#1) (S syntax) The Perl lexer knows whether to expect a term or an ope +rator. If it sees what it knows to be a term when it was expecting to see + an operator, it gives you this warning. Usually it indicates that an operator or delimiter was omitted, such as a semicolon. (Missing operator before ?) syntax error at noname.pl line 7, near "$b @char_count" Execution of noname.pl aborted due to compilation errors (#2) (F) Probably means you had a syntax error. Common reasons include +: A keyword is misspelled. A semicolon is missing. A comma is missing. An opening or closing parenthesis is missing. An opening or closing brace is missing. A closing quote is missing. Often there will be another error message associated with the synt +ax error giving more information. (Sometimes it helps to turn on -w. +) The error message itself often tells you where it was in the line +when it decided to give up. Sometimes the actual error is several toke +ns before this, because Perl is good at understanding random input. Occasionally the line number may be misleading, and once in a blue + moon the only way to figure out what's triggering the error is to call perl -c repeatedly, chopping away half the program each time to se +e if the error went away. Sort of the cybernetic version of S<20 questions>. Uncaught exception from user code: syntax error at noname.pl line 7, near "$b @char_count" Execution of noname.pl aborted due to compilation errors. at noname.pl line 7

    Which actually has the hint you needed: "An opening or closing brace is missing.".


    DWIM is Perl's answer to Gödel