1
187
I friend of mine recently accessed me for a little one liner to nicely
display all the paths in the $PATH vartiable on his NT 5.1 (aka XP Pro)
machine: (sorry for word wrap)
C:\> perl -e "print qq{\n}, join(qq{\n}, sort { lc{$a} cmp lc($b) }
split(/;/, $ENV {'PATH'})), qq{\n};"
C:\Program Files\Borland\JBuilder6\jdk1.3.1\bin
C:\Program Files\Executive Software\Diskeeper\
C:\Program Files\ATI Technologies\ATI Control Panel
C:\usr\local\wbin
C:\Inetpub\wwwroot\perl\bin\
C:\PROGRA~1\Borland\CBUILD~1\Projects\Bpl
C:\PROGRA~1\Borland\CBUILD~1\Bin
C:\Inetpub\wwwroot\perl\bin
C:\WINDOWS\system32
C:\WINDOWS
C:\WINDOWS\System32\Wbem
I get the same sort of oddness on my Linux machine as well:
$ perl -e 'print qq{\n}, join(qq{\n}, sort { lc{$a} cmp lc($b) }
split(/:/, $ENV{"PATH"})), qq{\n};'
/home/oracle/OraHome1/bin
/usr/bin
/usr/X11R6/bin
/misc/java/sdk/j2sdk1.4.1_02/bin
/home/bigal187/bin
/usr/sbin
/sbin
/usr/local/bin
/usr/local/sbin
/usr/local/BerkeleyDB.4.2/bin/
/usr/lib/qt/bin
/bin
Both Perl's are 5.6.1, though my Linux also has 5.8.2 which does
similar, though different order:
$ perl5.8.2 -e 'print qq{\n}, join(qq{\n}, sort { lc{$a} cmp lc($b) }
split(/:/, $ENV{"PATH"})), qq{\n};'
/home/oracle/OraHome1/bin
/home/bigal187/bin
/misc/java/sdk/j2sdk1.4.1_02/bin
/usr/X11R6/bin
/usr/bin
/usr/sbin
/bin
/sbin
/usr/local/bin
/usr/local/sbin
/usr/local/BerkeleyDB.4.2/bin/
/usr/lib/qt/bin
What is going on here? Why is sort doing this? I've used sort(), map(),
and grep() in cascaded form like this before without this problem;
split() returns an array, which get sucked into sort(), who spits it
back out to join(), does it not?
display all the paths in the $PATH vartiable on his NT 5.1 (aka XP Pro)
machine: (sorry for word wrap)
C:\> perl -e "print qq{\n}, join(qq{\n}, sort { lc{$a} cmp lc($b) }
split(/;/, $ENV {'PATH'})), qq{\n};"
C:\Program Files\Borland\JBuilder6\jdk1.3.1\bin
C:\Program Files\Executive Software\Diskeeper\
C:\Program Files\ATI Technologies\ATI Control Panel
C:\usr\local\wbin
C:\Inetpub\wwwroot\perl\bin\
C:\PROGRA~1\Borland\CBUILD~1\Projects\Bpl
C:\PROGRA~1\Borland\CBUILD~1\Bin
C:\Inetpub\wwwroot\perl\bin
C:\WINDOWS\system32
C:\WINDOWS
C:\WINDOWS\System32\Wbem
I get the same sort of oddness on my Linux machine as well:
$ perl -e 'print qq{\n}, join(qq{\n}, sort { lc{$a} cmp lc($b) }
split(/:/, $ENV{"PATH"})), qq{\n};'
/home/oracle/OraHome1/bin
/usr/bin
/usr/X11R6/bin
/misc/java/sdk/j2sdk1.4.1_02/bin
/home/bigal187/bin
/usr/sbin
/sbin
/usr/local/bin
/usr/local/sbin
/usr/local/BerkeleyDB.4.2/bin/
/usr/lib/qt/bin
/bin
Both Perl's are 5.6.1, though my Linux also has 5.8.2 which does
similar, though different order:
$ perl5.8.2 -e 'print qq{\n}, join(qq{\n}, sort { lc{$a} cmp lc($b) }
split(/:/, $ENV{"PATH"})), qq{\n};'
/home/oracle/OraHome1/bin
/home/bigal187/bin
/misc/java/sdk/j2sdk1.4.1_02/bin
/usr/X11R6/bin
/usr/bin
/usr/sbin
/bin
/sbin
/usr/local/bin
/usr/local/sbin
/usr/local/BerkeleyDB.4.2/bin/
/usr/lib/qt/bin
What is going on here? Why is sort doing this? I've used sort(), map(),
and grep() in cascaded form like this before without this problem;
split() returns an array, which get sucked into sort(), who spits it
back out to join(), does it not?