# New Ticket Created by "Sandy Bultena" # Please include the string: [perl #44621] # in the subject line of all future correspondence about this issue. # <URL: http://rt.perl.org/rt3/Ticket/Display.html?id=44621 >
OK, I'm game! ----- Original Message ----- From: "James E Keenan" <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Sent: Monday, August 13, 2007 9:31 PM Subject: [CAGE] Finish this module: Parrot::YetToBeNamed! > This ticket is a cage-cleaning assignment that would be especially > good for a newcomer to the Parrot project to take on. It entails the > creation of a module written in Perl 5 to be placed under lib/Parrot/ > which would serve as a repository for Perl 5 subroutines which can be > imported on demand by any Perl 5 packages anywhere in the Parrot > distribution at any point in the compile-build-test-install cycle. > > More precisely, it involves the *completion* of such a module, > because I've begun the module's specification below. Your task will > be to complete the documentation, write tests of the interface, then > write the code to implement the interface -- and then repeat the > cycle until you get a high-quality Perl 5 package. > > The impetus for this module comes from an inline comment made by Andy > Lester in r20618 of config/auto/attributes.pm: > > 20618 petdance # Stolen from Parrot::Test > 20618 petdance # Should be put somewhere more central > 20618 petdance sub _slurp_file { > 20618 petdance my ($file_name) = @_; > 20618 petdance > 20618 petdance open( my $SLURP, '<', $file_name ) or die "open > '$file_name': $!"; > 20618 petdance local $/ = undef; > 20618 petdance my $file = <$SLURP> . ''; > 20618 petdance $file =~ s/\cM\cJ/\n/g; > 20618 petdance close $SLURP; > 20618 petdance > 20618 petdance return $file; > 20618 petdance } > > Code to slurp a file into a string can be found in many places, > notably in the Perl Cookbook and in Uri's CPAN module File::Slurp. > But File::Slurp is not part of the Perl 5 core distribution. That > means it is not automatically available to Parrot developers. But > it's certainly something that would be nice to have. I wondered why > no one had made it available already. > > It turns out, someone *had* made it available already -- but *not* > available throughout all parts of the Parrot installation cycle. A > subroutine called slurp_file() is automatically exported by > Parrot::Test and is used *very* extensively throughout the build and > test phases (see attached file 'slurp_file.usages.txt' -- but note > that some instances of the string 'slurp_file' pertain to PIR code). > > So I wondered: Why didn't Andy simply call Parrot::Test::slurp_file > () in config/auto/attributes.pm? Why was he complaining that it > wasn't "central" enough? > > The answer is that Parrot::Test has a dependency on Parrot::Config: > > use Parrot::Config; > > ... and Parrot::Config doesn't come into existence until after the > configuration phase has completed! So Parrot::Test::slurp_file() can > only be used in the build and later phases -- even though it itself > has no dependency on Parrot::Config. It was not available when/where > Andy needed it, because config/auto/attributes.pm is part of the > configuration phase. > > In fact, slurp_file() doesn't have anything to do with testing per > se. There is no intrinsic reason why it should be housed in > Parrot::Test. (That's probably just where it first proved useful > some 8000 commits ago.) > > It therefore makes sense to: > > 1. Extract slurp_file() from Parrot::Test. > 2. Place it in a new package under lib/Parrot/ from which it is > exported on demand (*not* automatically, as is currently the case; > that's < best practice). > 3. Make this a package that can hold other self-contained, non- > object-oriented, utility subroutines written in Perl 5 that can be > useful in all phases of the Parrot installation cycle. > 4. Replace all current calls to Parrot::Test::slurp_file() with > calls to Parrot::YetToBeNamed::slurp_file(). > 5. And, of course, to do it right: write unit tests for the > subroutines exported by Parrot::YetToBeNamed. > > What do you need to accomplish these objectives? You don't need C, > PIR or PASM. In fact, you don't need to know anything about Parrot > at all! You only need competence in Perl 5. (Of course, it would > help if you've drunk the koolaid Schwern first started brewing seven > years ago. See any YAPC talk on module development or testing given > by him, chromatic, Ian Langworth, Paul Johnson, Andy or myself in > recent years.) > > In fact, this would be a great assignment for any/all of you who came > to our Parrot BOF at YAPC, said you were interested in joining the > project, but haven't yet started an assignment. Or a good assignment > for those of you in Phalanx Phoenix! > > So don't be bashful. Step up to the plate and hit this one out of > the ballpark -- and stop me before I use another baseball metaphor! > > kid51 > >