http://www.perlmonks.org?node_id=1017276


in reply to Re: Golf: reverse sort /etc/passwd by UID
in thread Golf: reverse sort /etc/passwd by UID

Does this work?

perl -E"say reverse sort{/(:\d+:)/<=>/(:\d+:)/}<>" /etc/passwd

No, it does not work.

In the sort compare function the current records are in $a and $b but you are not accessing the current record in your example.

The comparison operator <=> puts its operands into scalar context and the match operator in scalar context returns TRUE or FALSE so you are not comparing the contents of the capturing parentheses.

Replies are listed 'Best First'.
Re^3: Golf: reverse sort /etc/passwd by UID
by Tommy (Chaplain) on Feb 05, 2013 at 20:36 UTC

    It works, using the exact input I specified (as well as my /etc/passwd file...

    UPDATE: see my post about me being wrong...

    Tommy
    A mistake can be valuable or costly, depending on how faithfully you pursue correction

      Notice that your input is already "sorted". All that one liner does is reverse it.

        Noted. Re-reading perldoc -f sort reveals that the sort of "magic" I thought I was seeing wasn't the case. $a and $b are package globals explicitly passed by Perl itself to the sort block (or subroutine of your definition). It's not a bare leftside-rightside comparison of whatever expressions you may provide. You have to explicitly use the $a and $b package global symbols, and $_ isn't $a/$b. Them's the rules.

        I do indeed stand corrected.

        Tommy
        A mistake can be valuable or costly, depending on how faithfully you pursue correction