in reply to Get me excited about perl
Show them Perl's greatest asset -- concise solutions to everyday problems.
If you have time, pick some task that will resonate with as many of them as possible and get one or more of them to solve the chosen task in their favoured langugages before the day.
By way of example (because the examples already exist): frequency count the words in a text file.
// $Id: wordfreq.java,v 1.3 2000/12/17 21:40:53 doug Exp $ // http://www.bagley.org/~doug/shootout/ // Collection class code is from my friend Phil Chu, Thanks Phil! import java.io.*; import java.util.*; import java.text.*; class Counter { int count = 1; } public class wordfreq { public static void main(String[] args) { wf(); } public static String padleft(String s,int n,char c) { int len = s.length(); if( len>=n ) return s; char[] buf = new char[n]; for( int i=0;i<n-len;i++ ) buf[i]=c; s.getChars(0,len,buf,n-len); return new String(buf); } public static void wf() { HashMap map = new HashMap(); try { Reader r = new BufferedReader(new InputStreamReader(System +.in)); StreamTokenizer st = new StreamTokenizer(r); st.lowerCaseMode(true); st.whitespaceChars( 0, 64 ); st.wordChars(65, 90); st.whitespaceChars( 91, 96 ); st.wordChars(97, 122); st.whitespaceChars( 123, 255 ); int tt = st.nextToken(); while (tt != StreamTokenizer.TT_EOF) { if (tt == StreamTokenizer.TT_WORD) { if (map.containsKey(st.sval)) { ((Counter)map.get(st.sval)).count++; } else { map.put(st.sval, new Counter()); } } tt = st.nextToken(); } } catch (IOException e) { System.err.println(e); return; } Collection entries = map.entrySet(); // flatten the entries set into a vector for sorting Vector rev_wf = new Vector(entries); // Sort the vector according to its value Collections.sort(rev_wf, new Comparator() { public int compare(Object o1, Object o2) { // First sort by frequency int c = ((Counter)((Map.Entry)o2).getValue()).count - ((Co +unter)((Map.Entry)o1).getValue()).count; if (c == 0) { // Second sort by lexicographical order c = ((String)((Map.Entry)o2).getKey()).compareTo((String)( +(Map.Entry)o1).getKey()); } return c; } } ); Iterator it = rev_wf.iterator(); Map.Entry ent; String word; int count; while(it.hasNext()) { ent = (Map.Entry)it.next(); word = ((String)ent.getKey()); count = ((Counter)ent.getValue()).count; System.out.println(padleft(Integer.toString(count),7,' ') + "\ +t" + word); } } }
And then write & run your perl solution in real time:
perl -nle"y/a-zA-Z/ /cs; ++$h{$_} for split }{ print qq[$_:$h{$_}] for + sort keys %h" theFile break:1 brief:1 bring:3 brought:2 buffalo:16 burden:1 but:20 by:16 call:2 called:6 came:2 campaign:1 can:36 cannot:2 capable:1 capitals:1 career:2 cart:1 case:2 ...
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Get me excited about perl
by tobyink (Canon) on Sep 19, 2012 at 20:21 UTC | |
by BrowserUk (Patriarch) on Sep 19, 2012 at 20:54 UTC | |
by flexvault (Monsignor) on Sep 25, 2012 at 13:27 UTC | |
by tobyink (Canon) on Sep 25, 2012 at 15:04 UTC | |
by BrowserUk (Patriarch) on Oct 29, 2012 at 20:38 UTC | |
by flexvault (Monsignor) on Sep 25, 2012 at 16:31 UTC |