From jacoby at purdue.edu Mon Mar 1 08:26:36 2010 From: jacoby at purdue.edu (David Jacoby) Date: Mon, 01 Mar 2010 11:26:36 -0500 Subject: [Purdue-pm] Copying Hashrefs - A Better Way? Message-ID: <4B8BEABC.4090700@purdue.edu> I want to copy a hashref. Well, I want to copy the hash reffed, not the pointer. This is not it. my $href_1 ; $href->{x} = 8 ; my $href_2 = $href_1 ; You just get a pointer to the old hash, not a new hash. I want to copy the anonymous hash that $href_1 is referring to. my $href_1 ; my $href_2 ; $href->{x} = 8 ; %$href_2 = map { $_ } %$href_1 ; Yes, this works. But is there a better way? -- Dave Jacoby Address: WSLR S049 Genomics Core Programmer Mail: jacoby at purdue.edu Purdue University Phone: 765.49.67368 From westerman at purdue.edu Mon Mar 1 09:12:15 2010 From: westerman at purdue.edu (Rick Westerman) Date: Mon, 01 Mar 2010 12:12:15 -0500 Subject: [Purdue-pm] Copying Hashrefs - A Better Way? In-Reply-To: <4B8BEABC.4090700@purdue.edu> References: <4B8BEABC.4090700@purdue.edu> Message-ID: <4B8BF56F.1070005@purdue.edu> David Jacoby wrote: > I want to copy a hashref. Well, I want to copy the hash reffed, not > the pointer. This is not it. > > my $href_1 ; > $href->{x} = 8 ; > my $href_2 = $href_1 ; > > You just get a pointer to the old hash, not a new hash. I want to copy > the anonymous hash that $href_1 is referring to. > > my $href_1 ; > my $href_2 ; > $href->{x} = 8 ; > > %$href_2 = map { $_ } %$href_1 ; > > Yes, this works. But is there a better way? > I'd say no. Although you can drop the 'map' part. But I believe the normal hash copy uses 'map' internally so leaving it in does not really matter. Basically you are creating a new hash in memory. In long form -- to emphasize the point -- what you are doing is (where %h1 and %h2 are actual memory-using hashes) is basically: (created elsewhere): %h1 my $href_1 = \%h1; my %h2; my $href_2 = \%h2 ; If you were just working with hashes instead of hash references you would do a: %h2 = %h1 ; With references the syntax is not any different %h2 = %$href_1 ; or %$href_2 = %$href_1 ; Of course one then should ask, why do I need a complete copy of a hash? There may be good reason. Or perhaps better is to use 'grep' (akin to 'map') to filter the data from the old hash into the new hash. -- Rick Westerman westerman at purdue.edu Bioinformatics specialist at the Genomics Facility. Phone: (765) 494-0505 FAX: (765) 496-7255 Department of Horticulture and Landscape Architecture 625 Agriculture Mall Drive West Lafayette, IN 47907-2010 Physically located in room S049, WSLR building From mark at purdue.edu Tue Mar 9 04:38:52 2010 From: mark at purdue.edu (Mark Senn) Date: Tue, 09 Mar 2010 07:38:52 -0500 Subject: [Purdue-pm] FYI: Google Summer of Code Message-ID: <6732.1268138332@pier.ecn.purdue.edu> >From: Eric Wilhelm >To: PM Groups >Date: Mon, 8 Mar 2010 22:58:22 -0800 >User-Agent: KMail/1.9.9 >Subject: [pm_groups] Fwd: Calling All Google Summer of Code Mentors >Sender: pm_groups-bounces+mark=purdue.edu at pm.org >X-PerlMx-Virus-Scanned: Yes >X-ECN-MailServer-VirusScanned: by amavisd-new >X-ECN-MailServer-Origination: mailhub248.itcs.purdue.edu [128.210.5.248] >X-ECN-MailServer-SpamScanAdvice: DoNotScan > >Hi all, > >Please forward this to your local groups and help spread the word this >month about getting involved in Google Summer of Code. > > http://www.perlfoundation.org/perl5/index.cgi?gsoc_perlmongers > >Thanks, >Eric >---------- Forwarded Message: ---------- > >Subject: Calling All Google Summer of Code Mentors >Date: Monday 08 March 2010 >From: Jonathan Leto >To: Portland Perl Mongers > >Howdy, > >I am working on the application for The Perl Foundation and Parrot >Foundation to participate in Google Summer of Code 2010 [0]. GSoC is a >program where Google funds eligible students to hack on open source >projects for a summer. It is a great opportunity for the students and >the communities that mentor them. You also may be interested in this >summary of our involvement last year [1]. Our application will be >submitted by the end of this week. > >Please join us in getting prepared for this year. There is a page for >possible mentors to volunteer [2]* as well as a page for project ideas >[3]. If you would like to help with the wiki, our main GSoC page [4] >is the best place to start. You are also invited to join our mailing >list [5] and come ask question in #soc-help on irc.perl.org . > >Thanks! > >Duke > >[0] http://socghop.appspot.com/ >[1] >http://google-opensource.blogspot.com/2009/10/perls-of-wisdom-perl-foundation-parrots.html >[2] http://www.perlfoundation.org/perl5/index.cgi?gsoc_mentors >[3] http://www.perlfoundation.org/perl5/index.cgi?gsoc_2010_projects >[4] http://www.perlfoundation.org/perl5/index.cgi?gsoc >[5] http://groups.google.com/group/tpf-gsoc > >* If you listed yourself as a mentor last year and you are not >interested this year, please remove yourself from the page. > >-- >Jonathan "Duke" Leto >jonathan at leto.net >http://leto.net >-- >Request pm.org Technical Support via support at pm.org > >pm_groups mailing list >pm_groups at pm.org >http://mail.pm.org/mailman/listinfo/pm_groups From westerman at purdue.edu Wed Mar 10 08:43:26 2010 From: westerman at purdue.edu (Rick Westerman) Date: Wed, 10 Mar 2010 11:43:26 -0500 Subject: [Purdue-pm] Reminder, meeting this Tuesday, March 16th Message-ID: <4B97CC2E.7090207@purdue.edu> At the moment only Mark is scheduled to present. His offerings sound interesting. As usual if someone else wishes to present (even at the last moment) then please do so. WSLR 116, Noon to 1 with social time starting around 11:30. Tuesday March 16th -- Rick Westerman westerman at purdue.edu Bioinformatics specialist at the Genomics Facility. Phone: (765) 494-0505 FAX: (765) 496-7255 Department of Horticulture and Landscape Architecture 625 Agriculture Mall Drive West Lafayette, IN 47907-2010 Physically located in room S049, WSLR building From gizmo at purdue.edu Mon Mar 15 09:54:11 2010 From: gizmo at purdue.edu (Joe Kline) Date: Mon, 15 Mar 2010 12:54:11 -0400 Subject: [Purdue-pm] Reminder, meeting this Tuesday, March 16th In-Reply-To: <18584_1268239271_o2AGf9GT028445_4B97CC2E.7090207@purdue.edu> References: <18584_1268239271_o2AGf9GT028445_4B97CC2E.7090207@purdue.edu> Message-ID: <4B9E6633.2070608@purdue.edu> -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Rick, I thought I was going to do a summary of the Effective Perl class I went to in February (and probably roll in my summary of the sorting methods in Perl since that was covered in the class)? joe -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.5 (GNU/Linux) Comment: Using GnuPG with Red Hat - http://enigmail.mozdev.org iD8DBQFLnmYyb0mzA2gRTpkRAu+wAJ9w7qrergHIVJD6WoGtWtbk8dFSGwCfU42R EZgw/AOWnHIdglidLIl21oY= =YbDO -----END PGP SIGNATURE----- From westerman at purdue.edu Mon Mar 15 09:59:00 2010 From: westerman at purdue.edu (Rick Westerman) Date: Mon, 15 Mar 2010 12:59:00 -0400 Subject: [Purdue-pm] Reminder, meeting this Tuesday, March 16th In-Reply-To: <4B9E6633.2070608@purdue.edu> References: <18584_1268239271_o2AGf9GT028445_4B97CC2E.7090207@purdue.edu> <4B9E6633.2070608@purdue.edu> Message-ID: <4B9E6754.3080807@purdue.edu> Joe Kline wrote: > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > Rick, > > I thought I was going to do a summary of the Effective Perl class I went > to in February (and probably roll in my summary of the sorting methods > in Perl since that was covered in the class)? > > joe > That would be good. I'll put you down on the wiki. See you tomorrow. -- Rick Westerman westerman at purdue.edu Bioinformatics specialist at the Genomics Facility. Phone: (765) 494-0505 FAX: (765) 496-7255 Department of Horticulture and Landscape Architecture 625 Agriculture Mall Drive West Lafayette, IN 47907-2010 Physically located in room S049, WSLR building From gizmo at purdue.edu Fri Mar 19 04:05:50 2010 From: gizmo at purdue.edu (Joe Kline) Date: Fri, 19 Mar 2010 07:05:50 -0400 Subject: [Purdue-pm] literate programming Message-ID: <4BA35A8E.6060906@purdue.edu> -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 A post about literate programming and POD or at least a lament. http://www.lowlevelmanager.com/2010/03/pod-is-not-literate-programming.html -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEYEARECAAYFAkujWo0ACgkQb0mzA2gRTpnfEACfetJgXetEug0Y1o+wJAHagsXg DiYAn0YQWzADX1YvQcJoTE4IWnfOQL8l =E7U0 -----END PGP SIGNATURE----- From mdw at purdue.edu Fri Mar 19 06:14:13 2010 From: mdw at purdue.edu (Mark Daniel Ward) Date: Fri, 19 Mar 2010 09:14:13 -0400 Subject: [Purdue-pm] literate programming In-Reply-To: <4BA35A8E.6060906@purdue.edu> References: <4BA35A8E.6060906@purdue.edu> Message-ID: <4BA378A5.8030802@purdue.edu> Dear Joe, Literate Programming is an awesome idea. I'm very familiar with Knuth's work and his belief in Literate Programming. Knuth is the main guy in my field, and I know him very well (we've met on several occasions, and I am one of 4 people in the world to proofread his "Selected Papers" books before they are published, at Don's direct request). If you guys decide to talk about Literate Programming in one of the Perl meetings, I would probably be inspired to come! Mark On 3/19/10 7:05 AM, Joe Kline wrote: > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > A post about literate programming and POD or at least a lament. > > http://www.lowlevelmanager.com/2010/03/pod-is-not-literate-programming.html > -----BEGIN PGP SIGNATURE----- > Version: GnuPG v1.4.9 (GNU/Linux) > Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ > > iEYEARECAAYFAkujWo0ACgkQb0mzA2gRTpnfEACfetJgXetEug0Y1o+wJAHagsXg > DiYAn0YQWzADX1YvQcJoTE4IWnfOQL8l > =E7U0 > -----END PGP SIGNATURE----- > _______________________________________________ > Purdue-pm mailing list > Purdue-pm at pm.org > http://mail.pm.org/mailman/listinfo/purdue-pm > > From mark at ecn.purdue.edu Fri Mar 19 06:26:07 2010 From: mark at ecn.purdue.edu (Mark Senn) Date: Fri, 19 Mar 2010 09:26:07 -0400 Subject: [Purdue-pm] literate programming In-Reply-To: <4BA378A5.8030802@purdue.edu> References: <4BA35A8E.6060906@purdue.edu> <4BA378A5.8030802@purdue.edu> Message-ID: <6838.1269005167@pier.ecn.purdue.edu> Mark Daniel Ward wrote at 2010-03-19 09:14: > Dear Joe, > Literate Programming is an awesome idea. I'm very familiar with > Knuth's work and his belief in Literate Programming. Knuth is the > main guy in my field, and I know him very well (we've met on several > occasions, and I am one of 4 people in the world to proofread his > "Selected Papers" books before they are published, at Don's direct > request). > If you guys decide to talk about Literate Programming in one of > the Perl meetings, I would probably be inspired to come! > Mark T gave a talk that included information about TELPS (The Extensible Literate Programming System) I'm developing. It is pre-alpha and experimental. I'll send another message out Sunday, 2010-03-21, about it. -mark From mdw at purdue.edu Fri Mar 19 06:29:07 2010 From: mdw at purdue.edu (Mark Daniel Ward) Date: Fri, 19 Mar 2010 09:29:07 -0400 Subject: [Purdue-pm] literate programming In-Reply-To: <6838.1269005167@pier.ecn.purdue.edu> References: <4BA35A8E.6060906@purdue.edu> <4BA378A5.8030802@purdue.edu> <6838.1269005167@pier.ecn.purdue.edu> Message-ID: <4BA37C23.7@purdue.edu> Dear Mark, Great! Please keep me posted. Sounds interesting. Mark On 3/19/10 9:26 AM, Mark Senn wrote: > Mark Daniel Ward wrote at 2010-03-19 09:14: > >> Dear Joe, >> Literate Programming is an awesome idea. I'm very familiar with >> Knuth's work and his belief in Literate Programming. Knuth is the >> main guy in my field, and I know him very well (we've met on several >> occasions, and I am one of 4 people in the world to proofread his >> "Selected Papers" books before they are published, at Don's direct >> request). >> If you guys decide to talk about Literate Programming in one of >> the Perl meetings, I would probably be inspired to come! >> Mark >> > T gave a talk that included information about TELPS (The Extensible > Literate Programming System) I'm developing. It is pre-alpha and > experimental. I'll send another message out Sunday, 2010-03-21, > about it. -mark > > From jacoby at purdue.edu Fri Mar 19 09:05:58 2010 From: jacoby at purdue.edu (David Jacoby) Date: Fri, 19 Mar 2010 12:05:58 -0400 Subject: [Purdue-pm] Unicode Within Perl Message-ID: <4BA3A0E6.5070705@purdue.edu> After the last meeting, Mark, Joe and I talked a little about coding in Unicode, among other things. I have just tried some stuff quick. My go-to unicode symbol, u00b0 or ?, the degree symbol, is rejected as a variable-name character. But pi, ?, is accepted for variable names. Which is interesting. #!/usr/bin/perl use 5.010 ; use utf8 ; use strict ; use warnings ; binmode STDOUT , ':utf8' ; my $? = 'pi' ; say $? ; -- Dave Jacoby Address: WSLR S049 Genomics Core Programmer Mail: jacoby at purdue.edu Purdue University Phone: 765.49.67368 From mark at ecn.purdue.edu Fri Mar 19 09:55:18 2010 From: mark at ecn.purdue.edu (Mark Senn) Date: Fri, 19 Mar 2010 12:55:18 -0400 Subject: [Purdue-pm] Unicode Within Perl In-Reply-To: <21593_1269014529_o2JG293o014590_4BA3A0E6.5070705@purdue.edu> References: <21593_1269014529_o2JG293o014590_4BA3A0E6.5070705@purdue.edu> Message-ID: <7248.1269017718@pier.ecn.purdue.edu> Dave Jacoby wrote at 2010-03-19 12:05:58 -0400: > After the last meeting, Mark, Joe and I talked a little about coding in > Unicode, among other things. > > I have just tried some stuff quick. My go-to unicode symbol, u00b0 or ?, > the degree symbol, is rejected as a variable-name character. But pi, ?, > is accepted for variable names. Which is interesting. > > #!/usr/bin/perl > > use 5.010 ; > use utf8 ; > use strict ; > use warnings ; > binmode STDOUT , ':utf8' ; > > my $? = 'pi' ; > say $? ; Dave, Does http://www.perlmonks.org/?node_id=793800 answer your question? -mark From mark at purdue.edu Sun Mar 21 18:45:52 2010 From: mark at purdue.edu (Mark Senn) Date: Sun, 21 Mar 2010 21:45:52 -0400 Subject: [Purdue-pm] Extensible Literate Programming in Perl Message-ID: <12393.1269222352@pier.ecn.purdue.edu> The FunnelWeb Tutorial Manual [1] has a good description of literate programming: A traditional computer program consists of a text file containing program code. Scattered in amongst the program code are comments which describe the various parts of the code. In literate programming the emphasis is reversed. Instead of writing code containing documentation, the literate programmer writes documentation containing code. No longer does the English commentary injected into a program have to be hidden in comment delimiters at the top of the file, or under procedure headings, or at the end of lines. Instead, it is wrenched into the daylight and made the main focus. The "program" then becomes primarily a document directed at humans, with the code being herded between "code delimiters" from where it can be extracted and shuffled out sideways to the language system by literate programming tools. The effect of this simple shift of emphasis can be so profound as to change one's whole approach to programming. Under the literate programming paradigm, the central activity of programming becomes that of conveying meaning to other intelligent beings rather than merely convincing the computer to behave in a particular way. It is the difference between performing and exposing a magic trick. I'm writing TELPS, The Extensible Literate Programming System. I mainly started working on it to better explain my solution to the "PRE-CHRISTMAS SALE" Purdue Perl Mongers challenge problem. The commentary section can contain text and math notation using LaTeX and graphics using MetaPost. Other processors can be added easily (for example, to call Mathematica to do some computations or graphics to instert in the commentary). See [2] for more information about TELPS and an example. I'll be improving it. [1] http://www.ross.net/funnelweb/tutorial/intro_what.html [2] http://www.sharpresearch.com/telps/ Mark Senn From mark at sharpresearch.com Sun Mar 21 19:08:04 2010 From: mark at sharpresearch.com (Mark Senn) Date: Sun, 21 Mar 2010 21:08:04 -0500 Subject: [Purdue-pm] TELPS low volume mailing list Message-ID: <20100321210804.h97s3g79k4gw48c0@webmail.sharpresearch.com> Purdue Perl Mongers, I'm sorry, I forgot a detail. See http://www.sharpresearch.com/telps for instructions on how to sign up for a very low volume TELPS (The Extensible Literate Programming System) mailing list. I don't plan to send TELPS information to the Purdue Perl Mongers list in the future. Mark Senn From gizmo at purdue.edu Tue Mar 23 20:30:27 2010 From: gizmo at purdue.edu (Joe Kline) Date: Tue, 23 Mar 2010 23:30:27 -0400 Subject: [Purdue-pm] perl quotw Message-ID: <4BA98753.1000209@purdue.edu> -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 I looked through the quiz of the week archive (the first 6 or so actually) and I think quiz 6 seems like a good challenge. http://perl.plover.com/qotw/r/006 For those that are curious there were 2 qotw, regular and expert. The complete archives are at: Regular http://perl.plover.com/qotw/r/ Expert http://perl.plover.com/qotw/e/ These were sort of spearheaded by Mark-Jason Dominus http://perl.plover.com/qotw/ joe -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEYEARECAAYFAkuph1IACgkQb0mzA2gRTplerACdGYf6ue0420QpGsdghYFqVSev mBMAnjsVovsPD0OAZ9sM8+FTHS+OPaAJ =BUHH -----END PGP SIGNATURE----- From mdw at purdue.edu Wed Mar 24 05:36:11 2010 From: mdw at purdue.edu (Mark Daniel Ward) Date: Wed, 24 Mar 2010 08:36:11 -0400 Subject: [Purdue-pm] perl quotw In-Reply-To: <4BA98753.1000209@purdue.edu> References: <4BA98753.1000209@purdue.edu> Message-ID: <4BAA073B.6030305@purdue.edu> Dear Joe, Those qotw challenges were awesome! I didn't know about them before, but this is very cool. The next time that I'm teaching Perl in class, I could probably design some of the course challenges around things like that. Wow, very cool! Thank you for bringing those to everyone's attention. Neat! Thank you! Mark On 3/23/10 11:30 PM, Joe Kline wrote: > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > I looked through the quiz of the week archive (the first 6 or so > actually) and I think quiz 6 seems like a good challenge. > > http://perl.plover.com/qotw/r/006 > > For those that are curious there were 2 qotw, regular and expert. The > complete archives are at: > > Regular > > http://perl.plover.com/qotw/r/ > > Expert > http://perl.plover.com/qotw/e/ > > These were sort of spearheaded by Mark-Jason Dominus > > http://perl.plover.com/qotw/ > > joe > -----BEGIN PGP SIGNATURE----- > Version: GnuPG v1.4.9 (GNU/Linux) > Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ > > iEYEARECAAYFAkuph1IACgkQb0mzA2gRTplerACdGYf6ue0420QpGsdghYFqVSev > mBMAnjsVovsPD0OAZ9sM8+FTHS+OPaAJ > =BUHH > -----END PGP SIGNATURE----- > _______________________________________________ > Purdue-pm mailing list > Purdue-pm at pm.org > http://mail.pm.org/mailman/listinfo/purdue-pm > > From westerman at purdue.edu Wed Mar 24 06:05:04 2010 From: westerman at purdue.edu (Rick Westerman) Date: Wed, 24 Mar 2010 09:05:04 -0400 Subject: [Purdue-pm] perl quotw In-Reply-To: <4BA98753.1000209@purdue.edu> References: <4BA98753.1000209@purdue.edu> Message-ID: <4BAA0E00.2040309@purdue.edu> Joe Kline wrote: > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > I looked through the quiz of the week archive (the first 6 or so > actually) and I think quiz 6 seems like a good challenge. > > http://perl.plover.com/qotw/r/006 > > > Yes, that is a good one. Let's use it for the April challenge. I am not sure how we will judge the quality of the programs. It seems to me (without actually having written the program) that the run time will be in the seconds (or less). Perhaps we can judge on (a) "beauty" of the code and (b) robustness -- I have a couple ideas in regards to difficult or invalid input. In any case this is suppose to be a learning exercise for all and not a "my code is better than your code" contest. See you April 20th! -- Rick Westerman westerman at purdue.edu Bioinformatics specialist at the Genomics Facility. Phone: (765) 494-0505 FAX: (765) 496-7255 Department of Horticulture and Landscape Architecture 625 Agriculture Mall Drive West Lafayette, IN 47907-2010 Physically located in room S049, WSLR building From mark at ecn.purdue.edu Wed Mar 24 07:40:51 2010 From: mark at ecn.purdue.edu (Mark Senn) Date: Wed, 24 Mar 2010 10:40:51 -0400 Subject: [Purdue-pm] perl quotw In-Reply-To: <8721_1269435905_o2OD54PA013377_4BAA0E00.2040309@purdue.edu> References: <4BA98753.1000209@purdue.edu> <8721_1269435905_o2OD54PA013377_4BAA0E00.2040309@purdue.edu> Message-ID: <5474.1269441651@pier.ecn.purdue.edu> Rick Westerman wrote Wed, 24 Mar 2010 09:05:04 -0400 > Yes, that is a good one. Let's use it for the April challenge. I > am not sure how we will judge the quality of the programs. It seems > to me (without actually having written the program) that the run time > will be in the seconds (or less). Perhaps we can judge on (a) > "beauty" of the code and (b) robustness -- I have a couple ideas in > regards to difficult or invalid input. In any case this is suppose > to be a learning exercise for all and not a "my code is better than > your code" contest. > > See you April 20th! I'm not sure how we will judge the quality of the programs either. The specs at http://perl.plover.com/qotw/r/006 are too loose. Are only positive integers allowed? Will format_number_list input always use numbers instead of strings so wo don't have to worry about positive integers specified as, for example, '--42'? Will the input to the functions always be in sorted order? What should happen with no input? What should expand_number_list do with zero length input? And so on. I suggest we use YES (is checked before function is called, smallest number used is 1, largest 1000---for extra credit, smallest number used is 1, largest a google (1 followed by 100 zeroes)) YES (is checked before function is called) YES (so any sorting won't have to be part of any "Big O" discussions, sorted order checking is done before the functions are called) CAN'T HAPPEN (is checked by other code before the functions are called) CAN'T HAPPEN (is checked by other code before the functions are called) Other questions assume the simple case of specified input like the example with no other complications. (I'll be doing a Big O (see http://en.wikipedia.org/wiki/Big_O_notation) analysis of my solution for time and space.) -mark From gizmo at purdue.edu Wed Mar 24 08:04:12 2010 From: gizmo at purdue.edu (Joe Kline) Date: Wed, 24 Mar 2010 11:04:12 -0400 Subject: [Purdue-pm] perl quotw In-Reply-To: <5474.1269441651@pier.ecn.purdue.edu> References: <4BA98753.1000209@purdue.edu> <8721_1269435905_o2OD54PA013377_4BAA0E00.2040309@purdue.edu> <5474.1269441651@pier.ecn.purdue.edu> Message-ID: <4BAA29EC.2050805@purdue.edu> -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Mark Senn wrote: > Rick Westerman wrote Wed, 24 Mar 2010 09:05:04 -0400 > > Yes, that is a good one. Let's use it for the April challenge. I > > am not sure how we will judge the quality of the programs. It seems > > to me (without actually having written the program) that the run time > > will be in the seconds (or less). Perhaps we can judge on (a) > > "beauty" of the code and (b) robustness -- I have a couple ideas in > > regards to difficult or invalid input. In any case this is suppose > > to be a learning exercise for all and not a "my code is better than > > your code" contest. > > > > See you April 20th! > > I'm not sure how we will judge the quality of the programs either. > The specs at > http://perl.plover.com/qotw/r/006 > are too loose. Are only positive integers allowed? Will format_number_list > input always use numbers instead of strings so wo don't have to worry > about positive integers specified as, for example, '--42'? Will the input > to the functions always be in sorted order? What should happen with no input? > What should expand_number_list do with zero length input? And so on. > > I suggest we use > YES (is checked before function is called, smallest number used is 1, > largest 1000---for extra credit, smallest number used is 1, > largest a google (1 followed by 100 zeroes)) > YES (is checked before function is called) > YES (so any sorting won't have to be part of any "Big O" discussions, > sorted order checking is done before the functions are called) > CAN'T HAPPEN (is checked by other code before the functions are called) > CAN'T HAPPEN (is checked by other code before the functions are called) > Other questions assume the simple case of specified input like the > example with no other complications. > - From a brief look at the qotw discussion archive stuff like this left to the implementer. If your program can handle negative numbers so much the better. If mine barfs on null input...well that sucks. Constraining the problem constrains the coder. :-) This is Perl after all, TIMTOWTDI. joe -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.5 (GNU/Linux) Comment: Using GnuPG with Red Hat - http://enigmail.mozdev.org iD8DBQFLqinsb0mzA2gRTpkRAlMfAKCd1y0x9QRQ9FSuiZdCoR/qfA18VQCgi5EQ 0E4Ru0qjF/VNJErLE/603SA= =RMbg -----END PGP SIGNATURE----- From gizmo at purdue.edu Wed Mar 24 08:06:41 2010 From: gizmo at purdue.edu (Joe Kline) Date: Wed, 24 Mar 2010 11:06:41 -0400 Subject: [Purdue-pm] perl quotw In-Reply-To: <5474.1269441651@pier.ecn.purdue.edu> References: <4BA98753.1000209@purdue.edu> <8721_1269435905_o2OD54PA013377_4BAA0E00.2040309@purdue.edu> <5474.1269441651@pier.ecn.purdue.edu> Message-ID: <4BAA2A81.1070509@purdue.edu> -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 I forgot to add some links to the discussion thread. General quiz questions and possible problem with current quiz http://article.gmane.org/gmane.comp.lang.perl.qotw.discuss/719 Re: General quiz questions and possible problem with current quiz http://article.gmane.org/gmane.comp.lang.perl.qotw.discuss/722 Re: General quiz questions and possible problem with current quiz http://article.gmane.org/gmane.comp.lang.perl.qotw.discuss/720 Re: General quiz questions and possible problem with current quiz http://article.gmane.org/gmane.comp.lang.perl.qotw.discuss/725 General quiz questions and possible problem with current quiz http://news.gmane.org/gmane.comp.lang.perl.qotw.discuss The week 6 discussion is in page 11. joe -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.5 (GNU/Linux) Comment: Using GnuPG with Red Hat - http://enigmail.mozdev.org iD8DBQFLqiqAb0mzA2gRTpkRArvFAJ95Pad2Iqx/+dO1XjvGj0jFpztb/wCfVyBU b6t6qItdwBa//Eb/kZdxkFQ= =/g2R -----END PGP SIGNATURE----- From gribskov at purdue.edu Wed Mar 24 08:59:15 2010 From: gribskov at purdue.edu (Michael Gribskov) Date: Wed, 24 Mar 2010 11:59:15 -0400 Subject: [Purdue-pm] perl quotw In-Reply-To: <4BAA2A81.1070509@purdue.edu> References: <4BA98753.1000209@purdue.edu> <8721_1269435905_o2OD54PA013377_4BAA0E00.2040309@purdue.edu> <5474.1269441651@pier.ecn.purdue.edu> <4BAA2A81.1070509@purdue.edu> Message-ID: <4BAA36D3.2000801@purdue.edu> here is a test program you might use. the data, if i did it right has all possible transitions from singleton to singleton, singleton to range, range to range, and range to singleton use strict; my @datalist = ( [], [1, 4, 5, 6, 9, 13, 21, 22, 23, 25, 26, 27], [1, 2, 3, 5, 6, 7, 9, 13, 15, 16, 17, 27], [-27, -17, -16, -15, -13, -9, -7, -6, -5, -3, -2, -1], [-27, -26, -25, -23, -22, -21, -13, -9, -6, -5, -4, -1], [-8, -6, -5, -4, 9, 13, 21, 22, 23, 25, 26, 27], [-6, -5, -4, 5, 6, 7, 9, 13, 15, 16, 17, 27], [-8, -6, -5, -4, 0, 9, 13, 21, 22, 23, 25, 26, 27], [-6, -5, -4, 5, 9, 6, 7, 9, 13, 15, 16, 17, 27] ); my @datacomment = ( 'null list', 'begins with singleton, ends with range', 'begins with range, ends with singleton', 'negative numbers, begin with singleton, end with range', 'negative numbers, begin with range, end with singleton', 'negative & positive numbers, begin with singleton, end with range', 'negative & positive numbers, begin with range, end with singleton', 'negative & positive numbers & zero, begin with singleton, end with range', 'negative & positive numbers & zero, begin with range, end with singleton', ); foreach my $d ( 0 .. $#datalist ) { my @data = @{$datalist[$d]}; print "\ntest $d: $datacomment[$d]\n"; print " data = [ @data ]\n"; print " original number list: @data\n"; my $numstring = formatNumberList( @data ); print " formatted number list: $numstring\n"; my @newlist = expandNumberList( $numstring ); print " converted back to list: @newlist\n"; } Joe Kline wrote: > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > I forgot to add some links to the discussion thread. > > General quiz questions and possible problem with current quiz > http://article.gmane.org/gmane.comp.lang.perl.qotw.discuss/719 > > Re: General quiz questions and possible problem with current quiz > http://article.gmane.org/gmane.comp.lang.perl.qotw.discuss/722 > > Re: General quiz questions and possible problem with current quiz > http://article.gmane.org/gmane.comp.lang.perl.qotw.discuss/720 > > Re: General quiz questions and possible problem with current quiz > http://article.gmane.org/gmane.comp.lang.perl.qotw.discuss/725 > > > > General quiz questions and possible problem with current quiz > > http://news.gmane.org/gmane.comp.lang.perl.qotw.discuss > > The week 6 discussion is in page 11. > > joe > -----BEGIN PGP SIGNATURE----- > Version: GnuPG v1.4.5 (GNU/Linux) > Comment: Using GnuPG with Red Hat - http://enigmail.mozdev.org > > iD8DBQFLqiqAb0mzA2gRTpkRArvFAJ95Pad2Iqx/+dO1XjvGj0jFpztb/wCfVyBU > b6t6qItdwBa//Eb/kZdxkFQ= > =/g2R > -----END PGP SIGNATURE----- > _______________________________________________ > Purdue-pm mailing list > Purdue-pm at pm.org > http://mail.pm.org/mailman/listinfo/purdue-pm > -- Michael Gribskov Hockmeyer Hall of Structural Biology Purdue University 240 S. Martin Jischke Drive West Lafayette, IN 47907 gribskov at purdue.edu vox: 765.494.6933 fax: 765.496-1189 calendar: http://www.google.com/calendar/embed?src=mgribskov%40gmail.com From gribskov at purdue.edu Wed Mar 24 10:08:06 2010 From: gribskov at purdue.edu (Michael Gribskov) Date: Wed, 24 Mar 2010 13:08:06 -0400 Subject: [Purdue-pm] my solution to challenge In-Reply-To: <4BAA2A81.1070509@purdue.edu> References: <4BA98753.1000209@purdue.edu> <8721_1269435905_o2OD54PA013377_4BAA0E00.2040309@purdue.edu> <5474.1269441651@pier.ecn.purdue.edu> <4BAA2A81.1070509@purdue.edu> Message-ID: <4BAA46F6.9050604@purdue.edu> #!/usr/bin/perl -w #------------------------------------------------------------------------------ # $Id:$ # # Write a function, format_number_list, whose argument is a list of # integers. It then returns a string which represents the input list in # compact, human-readable form. # # For example, # format_number_list(1, 2, 4, 5, 6, 7, 9, 13, 24, 25, 26, 27) # will return # "1-2, 4-7, 9, 13, 24-27" # # Also write a function, 'expand_number_list', which does the conversion # in the opposite direction, so that # expand_number_list("1-2, 4-7, 9, 13, 24-27") # will return # (1, 2, 4, 5, 6, 7, 9, 13, 24, 25, 26, 27) # # Michael Gribskov Mar 24, 2010 # # Revision log at end of file #------------------------------------------------------------------------------ use strict; my @datalist = ( [], [1, 4, 5, 6, 9, 13, 21, 22, 23, 25, 26, 27], [1, 2, 3, 5, 6, 7, 9, 13, 15, 16, 17, 27], [-27, -17, -16, -15, -13, -9, -7, -6, -5, -3, -2, -1], [-27, -26, -25, -23, -22, -21, -13, -9, -6, -5, -4, -1], [-8, -6, -5, -4, 9, 13, 21, 22, 23, 25, 26, 27], [-6, -5, -4, 5, 6, 7, 9, 13, 15, 16, 17, 27], [-8, -6, -5, -4, 0, 9, 13, 21, 22, 23, 25, 26, 27], [-6, -5, -4, 0, 5, 9, 6, 7, 9, 13, 15, 16, 17, 27] ); my @datacomment = ( 'null list', 'begins with singleton, ends with range', 'begins with range, ends with singleton', 'negative numbers, begin with singleton, end with range', 'negative numbers, begin with range, end with singleton', 'negative & positive numbers, begin with singleton, end with range', 'negative & positive numbers, begin with range, end with singleton', 'negative & positive numbers & zero, begin with singleton, end with range', 'negative & positive numbers & zero, begin with range, end with singleton', ); foreach my $d ( 0 .. $#datalist ) { my @data = @{$datalist[$d]}; print "\ntest $d: $datacomment[$d]\n"; print " data = [ @data ]\n"; print " original number list: @data\n"; my $numstring = formatNumberList( @data ); print " formatted number list: $numstring\n"; my @newlist = expandNumberList2( $numstring ); print " converted back to list: @newlist\n"; } #------------------------------------------------------------------------------ # formatNumberList # # converts a list of numbers to a string where successive numbers are given as # as a range with a hyphen, e.g., 2,3,4 becomes 2-4. Works with negative # numbers and zero, but produces an ugly double hyphen. The input should be # presorted # # USAGE # $formatted_string = formatNumberList( @list ); #------------------------------------------------------------------------------ sub formatNumberList{ return "" unless @_; # return empty string for null input my $n = shift; my $str = $n; my $end; my $next = $n + 1; # $end is a marker that tells a range has ben opened, and gives the current # end of the range. if $end is undef, the current number either begins a # range or is a singleton. while ( @_ ) { $n = shift; if ( $n==$next ) { # begin a new range $str .= "-" unless $end; $end = $n; } else { # end of a range, or a singleton $str .= sprintf "%s, %d", $end||"", $n; undef $end; } $next = $n+1; } $str .= $end if $end; # close last range if it is a range return $str; } # End of formatNumberList #------------------------------------------------------------------------------ # expandNumberList # # convert the string produced by formatNumberList back to a list. This version # only works for positive numbers. # # USAGE # @list_of_numbers = expandNumberList( $number_list_string ); #------------------------------------------------------------------------------ sub expandNumberList{ my ( $numstring ) = @_; my @numlist; my @range = split /\s*,\s*/, $numstring; # split on comma with spaces foreach my $r ( @range ) { my ( $begin, $end ) = split "-", $r; unless ( defined $end ) { # $end is undef if not a range $end = $begin; } foreach my $i ( $begin .. $end ) { push @numlist, $i; } } return @numlist; } # End of expandNumberList #------------------------------------------------------------------------------ # expandNumberList2 # # convert the string produced by formatNumberList back to a list. This version # workks for zero, positive, and negative numbers # # USAGE # @list_of_numbers = expandNumberList( $number_list_string ); #------------------------------------------------------------------------------ sub expandNumberList2{ my ( $numstring ) = @_; my @numlist; # break string up into ranges and singletons by splitting on commas. just # in case, allow space around the commas my @range = split /\s*,\s*/, $numstring; foreach my $r ( @range ) { # get begin and end of range, if its a singleton, begin and end are the same my $begin = $r; my $end = $r; if ( $r =~ /\d-/ ) { # test if this is a range # convert negative signs to x, to protect from split $r =~ s/^-/x/; $r =~ s/--/-x/; # split and convert x back to negative ( $begin, $end ) = split "-", $r; $begin =~ s/x/-/; $end =~ s/x/-/; } # push range onto list. foreach my $i ( $begin .. $end ) { push @numlist, $i; } } return @numlist; } # End of expandNumberList2 #------------------------------------------------------------------------------ # $Log:$ #------------------------------------------------------------------------------ -- Michael Gribskov Hockmeyer Hall of Structural Biology Purdue University 240 S. Martin Jischke Drive West Lafayette, IN 47907 gribskov at purdue.edu vox: 765.494.6933 fax: 765.496-1189 calendar: http://www.google.com/calendar/embed?src=mgribskov%40gmail.com From gizmo at purdue.edu Thu Mar 25 08:04:26 2010 From: gizmo at purdue.edu (Joe Kline) Date: Thu, 25 Mar 2010 11:04:26 -0400 Subject: [Purdue-pm] deep copies Message-ID: <4BAB7B7A.2090408@purdue.edu> -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 I think Dave was asking about making copies of data structures some time back. The Effective Perler addressed that this week: http://www.effectiveperlprogramming.com/blog/85 joe -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.5 (GNU/Linux) Comment: Using GnuPG with Red Hat - http://enigmail.mozdev.org iD8DBQFLq3t6b0mzA2gRTpkRAnKBAJ9pqaJIgE01PALw91dStdPNF+6+fACgnphG l6nJv1g3rvUuT9jcPz6iNrw= =MWPl -----END PGP SIGNATURE----- From mark at purdue.edu Fri Mar 26 04:48:44 2010 From: mark at purdue.edu (Mark Senn) Date: Fri, 26 Mar 2010 07:48:44 -0400 Subject: [Purdue-pm] Google Summer of Code Message-ID: <15892.1269604124@pier.ecn.purdue.edu> The Purdue chapter of the Purdue Perl Mongers was sent the following message. The Purdue Perl Mongers is a Perl users group. Our homepage is at http://pm.purdue.org Mark Senn >Date: Fri, 26 Mar 2010 03:50:55 -0700 >From: Eric Wilhelm >To: pm_groups at pm.org >Cc: Jerry Gay , Jonathan Leto >Subject: [pm_groups] Google Summer of Code and TPF call for students > >Hi Perl Mongers, > >TPF is participating in GSoC 2010 and will begin accepting applications >from students on the 29th. Please share this info with your groups and >local academic contacts. > >If you are a college student interested in Open Source software, now is >the time to get involved. > > http://code.google.com/soc/ > >Each year, Google offers students the opportunity to spend their summer >coding on open source projects. You propose a project, and if selected, >you're assigned a mentor and provided a $4500 stipend. It is a >competitive program to get into, but offers an amazing amount of >real-world experience and the ability to get seriously involved in an >open source project of your choosing. The Perl Foundation spans a wide >variety of projects including Perl 5, Perl 6, and Parrot with many >great mentors knowledgeable in areas ranging from language design, >virtual machines, and compilers through web and desktop applications. >This program is a great chance to get more involved in the Perl >community and put a substantial project worth of source code in your >portfolio. > >Applications are due April 9th. > > http://www.perlfoundation.org/perl5/index.cgi?gsoc > >Thanks, >Eric >-- >http://pdx.pm.org From mark at sharpresearch.com Sat Mar 27 17:08:05 2010 From: mark at sharpresearch.com (Mark Senn) Date: Sat, 27 Mar 2010 19:08:05 -0500 Subject: [Purdue-pm] my challenge problem solution Message-ID: <20100327190805.nnx9xf3hkwows4k4@webmail.sharpresearch.com> Here is my solution to the latest challenge problem. It assumes that all input to the two subs we were asked to write is sanity checked outside of of those subs. -mark From mark at purdue.edu Sat Mar 27 17:42:20 2010 From: mark at purdue.edu (Mark Senn) Date: Sat, 27 Mar 2010 20:42:20 -0400 Subject: [Purdue-pm] take 2: challenge problem solution Message-ID: <10707.1269736940@pier.ecn.purdue.edu> Sorry for zero-length attachment in previous message. Below is my solution to the latest challenge problem. It assumes that all input to the two subs we were asked to write is sanity checked outside of of those subs. -mark #!/usr/bin/perl use Modern::Perl; # # From http://perl.plover.com/qotw/r/006 retrieved on 2010-03-27: # # Write a function, format_number_list, whose argument is a list of # integers. It then returns a string which represents the input list in # compact, human-readable form. # # For example, # # format_number_list(1, 2, 4, 5, 6, 7, 9, 13, 24, 25, 26, 27) # # will return # # "1-2, 4-7, 9, 13, 24-27" # # Also write a function, 'expand_number_list', which does the conversion # in the opposite direction, so that # # expand_number_list("1-2, 4-7, 9, 13, 24-27") # # will return # # (1, 2, 4, 5, 6, 7, 9, 13, 24, 25, 26, 27) # # From Michael Gribskov on 2010-03-24 (slightly edited to keep most lines # less than 80 characters): # # my @datalist = ( [], # [1, 4, 5, 6, 9, 13, 21, 22, 23, 25, 26, 27], # [1, 2, 3, 5, 6, 7, 9, 13, 15, 16, 17, 27], # [-27, -17, -16, -15, -13, -9, -7, -6, -5, -3, -2, -1], # [-27, -26, -25, -23, -22, -21, -13, -9, -6, -5, -4, -1], # [-8, -6, -5, -4, 9, 13, 21, 22, 23, 25, 26, 27], # [-6, -5, -4, 5, 6, 7, 9, 13, 15, 16, 17, 27], # [-8, -6, -5, -4, 0, 9, 13, 21, 22, 23, 25, 26, 27], # [-6, -5, -4, 5, 9, 6, 7, 9, 13, 15, 16, 17, 27] # ); # my @datacomment = ( 'null list', # 'begins with singleton, ends with range', # 'begins with range, ends with singleton', # 'negative numbers, begin with singleton, end with range', # 'negative numbers, begin with range, end with singleton', # 'negative & positive numbers, begin with singleton, end with range', # 'negative & positive numbers, begin with range, end with singleton', # 'negative & positive numbers & zero, begin with singleton, end with range', # 'negative & positive numbers & zero, begin with range, end with singleton', # ); # foreach my $d ( 0 .. $#datalist ) { # my @data = @{$datalist[$d]}; # print "\ntest $d: $datacomment[$d]\n"; # print " data = [ @data ]\n"; # print " original number list: @data\n"; # my $numstring = formatNumberList( @data ); # print " formatted number list: $numstring\n"; # my @newlist = expandNumberList( $numstring ); # print " converted back to list: @newlist\n"; # # } # # I think the time and space needed for the program below are both order n, # assuming perl's range operator is implemented reasonably. # # # Pair - format a begin/end pair # # Return "", "$begin", or "$begin-$end" # depending on values of $begin and $end. # sub Pair { my ($begin, $end) = @_; my $r = $begin // ''; ($end != $begin) and $r .= "-$end"; return $r; } # # expand_number_list - expand number list to array # # Expand, for example, # "1-2, 4-7, 9, 13, 24-27" # to # (1, 2, 4, 5, 6, 7, 9, 13, 24, 25, 26, 27) # # VARIABLE DESCRIPTION # $begin value that starts a singleton or a range # $end value that ends a singleton or a range # @r resulting components, 1, 2, 4, ... in above example # sub expand_number_list { my @item = split /,\s*/, $_[0]; my ($begin, $end); my @r = (); foreach (@item) { (/^(-?\d+)$/) and $begin = $1, $end = $1; (/^(-?\d+)-(-?\d+)$/) and $begin = $1, $end = $2; push @r, $begin..$end; } return @r; } # # format_number_list - reduce an array to a number list # # Reduce, for example, # (1, 2, 4, 5, 6, 7, 9, 13, 24, 25, 26, 27) # to # "1-2, 4-7, 9, 13, 24-27" # # I used the nested ternary operators instead of nested if-then-else's # because I thought that was more readable. Using if-then-else's would # have buried the actions to take in a lot more syntax. # # VARIABLE DESCRIPTION # $begin value that starts a singleton or a range # $end value that ends a singleton or a range # @r resulting components, "1-2", "4-7", "9", ... in above example # sub format_number_list { my @r = (); my $begin = my $end = undef; foreach (@_) { (defined $begin) ? ($_ == $end+1) ? do { $end = $_; } : do { push @r, Pair $begin, $end; $begin = $end = $_; } : do { $begin = $end = $_; } } (defined $begin) and push @r, Pair $begin, $end; return join ', ', @r; } # # main program # my $sepline = '-' x 40; # line to separate lines of output while () { chomp; my @data0 = split /,\s*/; my $data1 = format_number_list @data0; my @data2 = expand_number_list $data1; say $sepline; say "data read: @data0"; say "after expand number_list: @data2"; say "after format_number_list: $data1"; ((join ' ', @data0) ne (join ' ', @data2)) and die "data0 and data2 are different"; say $sepline; } # # All of this data except the last two lines is from Michael Gribskov. # __DATA__ 1, 4, 5, 6, 9, 13, 21, 22, 23, 25, 26, 27 1, 2, 3, 5, 6, 7, 9, 13, 15, 16, 17, 27 -27, -17, -16, -15, -13, -9, -7, -6, -5, -3, -2, -1 -27, -26, -25, -23, -22, -21, -13, -9, -6, -5, -4, -1 -8, -6, -5, -4, 9, 13, 21, 22, 23, 25, 26, 27 -6, -5, -4, 5, 6, 7, 9, 13, 15, 16, 17, 27 -8, -6, -5, -4, 0, 9, 13, 21, 22, 23, 25, 26, 27 -6, -5, -4, 5, 9, 6, 7, 9, 13, 15, 16, 17, 27 -1, 0, 1 0 From mark at purdue.edu Sat Mar 27 19:48:25 2010 From: mark at purdue.edu (Mark Senn) Date: Sat, 27 Mar 2010 22:48:25 -0400 Subject: [Purdue-pm] tweak to program Message-ID: <21044.1269744505@pier.ecn.purdue.edu> The program I sent earlier had (/^(-?\d+)$/) and $begin = $1, $end = $1; (/^(-?\d+)-(-?\d+)$/) and $begin = $1, $end = $2; push @r, $begin..$end; I changed that to /^(-?\d+)(?:-(-?\d+))?$/; $begin = $1; $end = $2 // $1; push @r, $begin..$end; because I think that expresses it better, even though the regular expression is more complex. (I usually don't use the "group but don't capture" (?: ... ) because I don't like that syntax and instead capture everything even if it is not used later.) The $2 // $1 means use the value of $2 if it is set, otherwise use the value of $1. This code is hard to read if one hasn't seen this technique before but what I'm trying to express maps nicely to this code. -mark From mark at purdue.edu Sat Mar 27 20:06:27 2010 From: mark at purdue.edu (Mark Senn) Date: Sat, 27 Mar 2010 23:06:27 -0400 Subject: [Purdue-pm] Perl6 Periodic Table of the Operators Message-ID: <22101.1269745587@pier.ecn.purdue.edu> See http://www.ozonehouse.com/mark/periodic/ for free 8 1/4 x 11 3/4 inch JPEG Perl6 Periodic Table of the Operators and some expensive posters bigger than that. Perl6's // operator has been added to Perl5. Mark Lentczner updated this poster in February, 2009. Disclosure: I don't know Mark, don't make any money from this, etc. -mark