Your SlideShare is downloading. ×
Dist::Zilla
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Dist::Zilla

4,516
views

Published on

Dist::Zilla is a tool for writing less crap and more code when building CPAN distributions.

Dist::Zilla is a tool for writing less crap and more code when building CPAN distributions.

Published in: Technology, Health & Medicine

0 Comments
7 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
4,516
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
42
Comments
0
Likes
7
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Dist::Zilla raaaaaaaaar!
  • 2. you @ cpan . org This talk is about your life as a CPAN author.
  • 3. CPAN == Dists The CPAN is just a bunch of dists (distributions).
  • 4. YourApp-1.0.tar.gz isa Dist and a distribution is just an archive file
  • 5. dists contain files
  • 6. ~/code/YourApp$ find . ./Changes ./LICENSE ./MANIFEST.SKIP ./Makefile.PL ./README ./lib/YourApp.pm ./lib/YourApp/Reticulator.pm ./lib/YourApp/Util/mtfnpy.pm ./lib/YourApp/Xyzzy.pm ./t/unit-tests.t ./t/pod-coverage.t ./t/pod.t this is all the crap in your working copy where you write this dist making all these is a boring pain in the ass
  • 7. being a dist author is hard! let’s go gemming!
  • 8. Module::Starter
  • 9. C K S ! U Module::Starter S
  • 10. only gets you to a starting point
  • 11. can’t rebuild from templates post facto
  • 12. can’t add files to your dist
  • 13. no good for files that need to be rebuilt a lot
  • 14. Module::Install
  • 15. generates some files when running ‘make’
  • 16. Makefile.PL takes the usually short Makefile.PL
  • 17. Makefile.PL makes it slightly smaller
  • 18. Module::Install
  • 19. C K S ! U Module::Install S
  • 20. relies on ExtUtils::MakeMaker
  • 21. relies on ExtUtils::MakeMaker CK S! SU
  • 22. puts insane complexity on user’s computer
  • 23. bundles scary, versioned code in the dist
  • 24. when bugs are fixed, everybody re-releases
  • 25. ...to review...
  • 26. writing code == fun
  • 27. writing =head1 LICENSE NOT FUN
  • 28. Dist::Zilla raaaaaaaaar!
  • 29. ~/code/YourApp$ find . ./Changes ./LICENSE ./MANIFEST.SKIP ./Makefile.PL ./README ./lib/YourApp.pm ./lib/YourApp/Reticulator.pm ./lib/YourApp/Util/mtfnpy.pm ./lib/YourApp/Xyzzy.pm ./t/unit-tests.t ./t/pod-coverage.t ./t/pod.t So, back to this list of files....
  • 30. ~/code/YourApp$ find . ./lib/YourApp.pm ./lib/YourApp/Reticulator.pm ./lib/YourApp/Util/mtfnpy.pm ./lib/YourApp/Xyzzy.pm ./t/unit-tests.t Let’s get rid of all the crap
  • 31. ~/code/YourApp$ find . dist.conf ./lib/YourApp.pm ./lib/YourApp/Reticulator.pm ./lib/YourApp/Util/mtfnpy.pm ./lib/YourApp/Xyzzy.pm ./t/unit-tests.t and replace it with a little config for Dist::Zilla
  • 32. package YourApp; =head1 NAME YourApp - my awesome app =head1 VERSION version 1.001 =cut our $VERSION = 0.001; =head1 DESCRIPTION This app is awesome. =head1 METHODS =head2 this_method This method does stuff. =cut method this_method { ... } =head2 that_method Also stuff. method that_method { ... } =head1 AUTHOR Margo Yapp <myapp@example.com> =head1 LICENSE Copyright (C) 2008, Margo Yapp. This is distributed under the terms of the accidental death and dismemberment license and if you redistribuet this document you will be “accidentally” deathed or dismembered. You have been told. =cut 1; Here’s a .pm file
  • 33. package YourApp; =head1 NAME YourApp - my awesome app =head1 VERSION version 1.001 =cut our $VERSION = 0.001; =head1 DESCRIPTION This app is awesome. =head1 METHODS =head2 this_method This method does stuff. =cut method this_method { ... } =head2 that_method Also stuff. method that_method { ... } =head1 AUTHOR Margo Yapp <myapp@example.com> =head1 LICENSE Copyright (C) 2008, Margo Yapp. This is distributed under the terms of the accidental death and dismemberment license and if you redistribuet this document you will be “accidentally” deathed or dismembered. You have been told. =cut 1; The =name section is annoying.
  • 34. package YourApp; # ABSTRACT: my awesome app =head1 VERSION version 1.001 =cut our $VERSION = 0.001; =head1 DESCRIPTION This app is awesome. =head1 METHODS =head2 this_method This method does stuff. =cut method this_method { ... } =head2 that_method Also stuff. method that_method { ... } =head1 AUTHOR Margo Yapp <myapp@example.com> =head1 LICENSE Copyright (C) 2008, Margo Yapp. This is distributed under the terms of the accidental death and dismemberment license and if you redistribuet this document you will be “accidentally” deathed or dismembered. You have been told. =cut 1; We’ll replace it with a comment.
  • 35. package YourApp; # ABSTRACT: my awesome app =head1 VERSION version 1.001 =cut our $VERSION = 0.001; =head1 DESCRIPTION This app is awesome. =head1 METHODS =head2 this_method This method does stuff. =cut method this_method { ... } =head2 that_method Also stuff. method that_method { ... } =head1 AUTHOR Margo Yapp <myapp@example.com> =head1 LICENSE Copyright (C) 2008, Margo Yapp. This is distributed under the terms of the accidental death and dismemberment license and if you redistribuet this document you will be “accidentally” deathed or dismembered. You have been told. =cut 1; The =version section is redundant.
  • 36. package YourApp; # ABSTRACT: my awesome app our $VERSION = 0.001; =head1 DESCRIPTION This app is awesome. =head1 METHODS =head2 this_method This method does stuff. =cut method this_method { ... } =head2 that_method Also stuff. method that_method { ... } =head1 AUTHOR Margo Yapp <myapp@example.com> =head1 LICENSE Copyright (C) 2008, Margo Yapp. This is distributed under the terms of the accidental death and dismemberment license and if you redistribuet this document you will be “accidentally” deathed or dismembered. You have been told. =cut 1; Drop it.
  • 37. package YourApp; # ABSTRACT: my awesome app our $VERSION = 0.001; =head1 DESCRIPTION This app is awesome. =head1 METHODS =head2 this_method This method does stuff. =cut method this_method { ... } =head2 that_method Also stuff. method that_method { ... } =head1 AUTHOR Margo Yapp <myapp@example.com> =head1 LICENSE Copyright (C) 2008, Margo Yapp. This is distributed under the terms of the accidental death and dismemberment license and if you redistribuet this document you will be “accidentally” deathed or dismembered. You have been told. =cut 1; Even the $VERSION is redundant, since we want it constant across the dist.
  • 38. package YourApp; # ABSTRACT: my awesome app =head1 DESCRIPTION This app is awesome. =head1 METHODS =head2 this_method This method does stuff. =cut method this_method { ... } =head2 that_method Also stuff. method that_method { ... } =head1 AUTHOR Margo Yapp <myapp@example.com> =head1 LICENSE Copyright (C) 2008, Margo Yapp. This is distributed under the terms of the accidental death and dismemberment license and if you redistribuet this document you will be “accidentally” deathed or dismembered. You have been told. =cut 1; our overarching METHOD section is dumb
  • 39. package YourApp; # ABSTRACT: my awesome app =head1 DESCRIPTION This app is awesome. =method this_method This method does stuff. =cut method this_method { ... } =method that_method Also stuff. method that_method { ... } =head1 AUTHOR Margo Yapp <myapp@example.com> =head1 LICENSE Copyright (C) 2008, Margo Yapp. This is distributed under the terms of the accidental death and dismemberment license and if you redistribuet this document you will be “accidentally” deathed or dismembered. You have been told. =cut 1; let’s just use =method for them all
  • 40. package YourApp; # ABSTRACT: my awesome app =head1 DESCRIPTION This app is awesome. =method this_method This method does stuff. =cut method this_method { ... } =method that_method Also stuff. method that_method { ... } =head1 AUTHOR Margo Yapp <myapp@example.com> =head1 LICENSE Copyright (C) 2008, Margo Yapp. This is distributed under the terms of the accidental death and dismemberment license and if you redistribuet this document you will be “accidentally” deathed or dismembered. You have been told. =cut 1; Repeating the author everywhere is annoying, too.
  • 41. package YourApp; # ABSTRACT: my awesome app =head1 DESCRIPTION This app is awesome. =method this_method This method does stuff. =cut method this_method { ... } =method that_method Also stuff. method that_method { ... } =head1 LICENSE Copyright (C) 2008, Margo Yapp. This is distributed under the terms of the accidental death and dismemberment license and if you redistribuet this document you will be “accidentally” deathed or dismembered. You have been told. =cut 1; Drop it, use author info found in DZ config.
  • 42. package YourApp; # ABSTRACT: my awesome app =head1 DESCRIPTION This app is awesome. =method this_method This method does stuff. =cut method this_method { ... } =method that_method Also stuff. method that_method { ... } =head1 LICENSE Copyright (C) 2008, Margo Yapp. This is distributed under the terms of the accidental death and dismemberment license and if you redistribuet this document you will be “accidentally” deathed or dismembered. You have been told. =cut 1; The license is gigantic! Ugh!
  • 43. package YourApp; # ABSTRACT: my awesome app =head1 DESCRIPTION This app is awesome. =method this_method This method does stuff. =cut method this_method { ... } =method that_method Also stuff. method that_method { ... } 1; Drop it.
  • 44. package YourApp; # ABSTRACT: my awesome app =head1 DESCRIPTION This app is awesome. =method this_method This method does stuff. =cut method this_method { ... } =method that_method Also stuff. method that_method { ... } 1; Now our file is simple, just the unique docs and code it needs. It fits on one legible slide!
  • 45. package YourApp; # ABSTRACT: my awesome app =head1 DESCRIPTION This app is awesome. =method this_method This method does stuff. =cut method this_method { ... } =method that_method Also stuff. method that_method { ... } 1; And is about half Perl.
  • 46. the CLI interface
  • 47. dzil new the CLI interface
  • 48. dzil new dzil test the CLI interface
  • 49. dzil new dzil test dzil build the CLI interface
  • 50. dzil new dzil test dzil build dzil release the CLI interface
  • 51. spin-off modules CPAN::Uploader String::RewritePrefix Pod::Eventual Config::INI::MVP::Reader Pod::Weaver Mixin::Linewise Software::License Data::Section String::Flogger Pod::Elemental lots of spin-off modules
  • 52. lots of prereqs
  • 53. ...but that’s okay...
  • 54. dzil replaces “make dist”
  • 55. ...and the dist is boring
  • 56. plain old Makefile.PL (or Build.PL)
  • 57. users don’t notice that you used Dist::Zilla
  • 58. they just notice how productive you are
  • 59. Dist::Zilla raaaaaaaaar!

×