Skip to main content
Massively Parallel Procrastination

Perlish goodness

We have a new build and distribution tool called 'Shipwright.' It basically takes the pain out of distributing perl applications with all their dependencies. (It also lets you version the dependencies, build relocatable binary distributions with one command and actually imports packages and their dependencies into version control with a single command).

So, this is what Hiveminder's Shipwright repository looks like. It took me 3 commands to check all of these into version control

AnyEvent/
App-CLI/
Archive-Tar/
Array-Compare/
BTDT/
Bit-Vector/
Business-CreditCard/
Business-OnlinePayment/
Business-OnlinePayment-AuthorizeNet/
Business-OnlinePayment-AuthorizeNet-AIM-ErrorCodes/
CGI-Cookie-Splitter/
CGI-Simple/
CGI.pm/
CSS-Squish/
Cache-Cache/
Cache-Simple-TimedExpiry/
Calendar-Simple/
Carp-Assert/
Carp-Assert-More/
Carp-Clan/
Chatbot-Eliza/
Class-Accessor/
Class-Accessor-Chained/
Class-Container/
Class-Data-Inheritable/
Class-Factory-Util/
Class-InsideOut/
Class-Inspector/
Class-ReturnValue/
Class-Singleton/
Class-Trigger/
Clone/
Color-Calc/
Color-Library/
Compress-PPMd/
Compress-Raw-Zlib/
Compress-Zlib/
Config-General/
Coro/
Crypt-Blowfish/
Crypt-CBC/
Crypt-Rijndael/
DBD-Pg/
DBD-SQLite/
DBI/
DBIx-DBSchema/
DBM-Deep/
Data-Denter/
Data-ICal/
Data-OptList/
Data-Page/
Data-Serializer/
Data-Taxi/
Data-UUID/
Date-Calc/
Date-Extract/
Date-ICal/
Date-Leapyear/
Date-Manip/
DateTime/
DateTime-Format/
DateTime-Format-Builder/
DateTime-Format-Mail/
DateTime-Format-Natural/
DateTime-Format-Strptime/
DateTime-Locale/
DateTime-TimeZone/
Devel-StackTrace/
Devel-Symdump/
Digest/
Digest-SHA/
EV/
Email-Abstract/
Email-Address/
Email-Date-Format/
Email-Folder/
Email-FolderType/
Email-LocalDelivery/
Email-MIME/
Email-MIME-Attachment-Stripper/
Email-MIME-ContentType/
Email-MIME-CreateHTML/
Email-MIME-Creator/
Email-MIME-Encodings/
Email-MIME-Modifier/
Email-MessageID/
Email-Reply/
Email-Send/
Email-Simple/
Email-Simple-Creator/
Error/
Event/
Exception-Class/
Exporter-Lite/
ExtUtils-CBuilder/
ExtUtils-Command/
ExtUtils-MakeMaker/
ExtUtils-ParseXS/
File-Find-Rule/
File-MMagic/
File-Path-Expand/
File-Policy/
File-ShareDir/
File-Slurp/
FileHandle-Fmode/
FreezeThaw/
GD/
Graphics-ColorNames/
Graphics-ColorNames-WWW/
HTML-Lint/
HTML-Mason/
HTML-Parser/
HTML-Scrubber/
HTML-TagCloud/
HTML-Tagset/
HTML-TokeParser-Simple/
HTML-Truncate/
HTTP-Server-Simple/
HTTP-Server-Simple-Recorder/
Hash-Merge/
Hook-LexWrap/
IO-AIO/
IO-All/
IO-Compress-Base/
IO-Compress-Zlib/
IO-Socket-SSL/
IO-String/
IO-Tee/
IO-Zlib/
IO-stringy/
IPC/
IPC-Cmd/
IPC-PubSub/
JSON/
JSON-Any/
Jifty/
Jifty-DBI/
Lingua-EN-Inflect/
Lingua-EN-Numbers-Ordinate/
List-MoreUtils/
Locale-Maketext-Lexicon/
Locale-Maketext-Simple/
Log-Log4perl/
Log-Trace/
MIME-Types/
Module-Build/
Module-CoreList/
Module-Load/
Module-Load-Conditional/
Module-Loaded/
Module-Pluggable/
Module-Refresh/
Module-ScanDeps/
Module-Signature/
Net-IMAP-Server/
Net-IMAP-Simple/
Net-IMAP-Simple-SSL/
Net-SSLeay/
Net-Server/
Net-Server-Coro/
Net-Twitter/
Number-Compare/
Number-RecordLocator/
Object-Declare/
PHP-Serialization/
PadWalker/
Params-Check/
Params-Util/
Params-Validate/
PathTools/
Pod-Coverage/
Pod-Escapes/
Pod-Readme/
Pod-Simple/
Pod-Strip/
Proc-ProcessTable/
Regexp-Common/
Regexp-Common-Email-Address/
Return-Value/
SQL-ReservedWords/
Scalar-Defer/
Spiffy/
String-Koremutake/
Sub-Exporter/
Sub-Install/
Sub-Override/
Sub-Uplevel/
Task-Weaken/
Template-Declare/
TermReadKey/
Test-Assertions/
Test-Base/
Test-Deep/
Test-Dependencies/
Test-Distribution/
Test-Exception/
Test-HTTP-Server-Simple/
Test-Log4perl/
Test-LongString/
Test-Manifest/
Test-Mock-LWP/
Test-MockObject/
Test-MockTime/
Test-NoWarnings/
Test-Pod/
Test-Pod-Coverage/
Test-Portability-Files/
Test-Simple/
Test-Tester/
Test-WWW-Mechanize/
Test-WWW-Selenium/
Test-Warn/
Test-use-ok/
Text-Autoformat/
Text-CSV_XS/
Text-FixEOL/
Text-Glob/
Text-Markdown/
Text-Password-Pronounceable/
Text-Quoted/
Text-Reform/
Text-Tags/
Text-vFile-asData/
Tie-IxHash/
Tie-Sub/
Time-Duration/
Time-Piece/
Time-modules/
Tree-DAG_Node/
UNIVERSAL-can/
UNIVERSAL-isa/
UNIVERSAL-require/
URI/
WWW-Mechanize/
XML-Atom/
XML-Dumper/
XML-LibXML/
XML-LibXML-Common/
XML-NamespaceSupport/
XML-Parser/
XML-SAX/
XML-Simple/
XML-Writer/
XML-XPath/
YAML/
YAML-Syck/
libwww-perl/
parent/
podlators/
rpm-build-perl/
version/

And this is the order they need to be built in: (It took 0 manual commands to work that out)
---
- ExtUtils-MakeMaker
- EV
- AnyEvent
- Event
- IO-AIO
- Coro
- Net-Server
- Net-Server-Coro
- Tree-DAG_Node
- Test-Simple
- Module-Signature
- Pod-Escapes
- Pod-Simple
- podlators
- Regexp-Common
- Test-Pod
- Test-Portability-Files
- Devel-Symdump
- Pod-Coverage
- Test-Pod-Coverage
- Pod-Readme
- version
- ExtUtils-CBuilder
- IO-Compress-Base
- Compress-Raw-Zlib
- IO-Compress-Zlib
- Compress-Zlib
- IO-Zlib
- Archive-Tar
- ExtUtils-ParseXS
- Module-Build
- Sub-Uplevel
- Test-Exception
- Array-Compare
- Test-Warn
- Net-SSLeay
- IO-Socket-SSL
- Email-MIME-ContentType
- Class-Accessor
- Email-Simple
- Email-Address
- Email-MIME-Encodings
- MIME-Types
- Email-MIME
- Net-IMAP-Server
- Params-Validate
- DateTime-Locale
- Class-Singleton
- DateTime-TimeZone
- DateTime
- IO-stringy
- Class-Trigger
- Sub-Override
- Object-Declare
- Clone
- Hash-Merge
- Cache-Simple-TimedExpiry
- UNIVERSAL-require
- Lingua-EN-Inflect
- DBI
- DBD-SQLite
- Exporter-Lite
- Class-InsideOut
- Scalar-Defer
- Class-Accessor-Chained
- Data-Page
- Devel-StackTrace
- Class-ReturnValue
- YAML-Syck
- Task-Weaken
- Class-Factory-Util
- DateTime-Format-Strptime
- DateTime-Format-Builder
- Module-CoreList
- Text-Glob
- Number-Compare
- File-Find-Rule
- Test-Distribution
- DateTime-Format
- FreezeThaw
- DBIx-DBSchema
- Class-Data-Inheritable
- Jifty-DBI
- YAML
- Locale-Maketext-Lexicon
- Module-Pluggable
- Locale-Maketext-Simple
- App-CLI
- Sub-Install
- Params-Util
- Data-OptList
- Sub-Exporter
- SQL-ReservedWords
- Email-MessageID
- Email-MIME-Modifier
- Exception-Class
- Error
- Digest
- Cache-Cache
- Class-Container
- HTML-Tagset
- HTML-Parser
- HTML-Mason
- ExtUtils-Command
- URI
- HTTP-Server-Simple
- Crypt-CBC
- Module-Refresh
- Data-UUID
- FileHandle-Fmode
- DBM-Deep
- IPC-PubSub
- File-Path-Expand
- Email-FolderType
- Email-LocalDelivery
- Log-Trace
- Email-Date-Format
- Email-Simple-Creator
- Email-MIME-Creator
- HTML-TokeParser-Simple
- Digest-SHA
- Data-Taxi
- Compress-PPMd
- XML-NamespaceSupport
- XML-SAX
- XML-Simple
- Crypt-Blowfish
- JSON
- libwww-perl
- XML-Parser
- XML-Dumper
- PHP-Serialization
- Config-General
- Data-Denter
- Data-Serializer
- Test-Assertions
- File-Slurp
- File-Policy
- Email-MIME-CreateHTML
- Date-Manip
- HTML-Lint
- Template-Declare
- UNIVERSAL-can
- UNIVERSAL-isa
- Test-MockObject
- Test-Mock-LWP
- Test-WWW-Selenium
- Calendar-Simple
- Class-Inspector
- File-ShareDir
- Test-LongString
- XML-XPath
- IPC
- WWW-Mechanize
- String-Koremutake
- Log-Log4perl
- File-MMagic
- XML-Writer
- IO-Tee
- Test-HTTP-Server-Simple
- HTTP-Server-Simple-Recorder
- Return-Value
- Email-Send
- Email-Folder
- PathTools
- Lingua-EN-Numbers-Ordinate
- Test-Log4perl
- Module-ScanDeps
- Spiffy
- Test-Base
- PadWalker
- Carp-Assert
- Carp-Assert-More
- Test-WWW-Mechanize
- Test-Manifest
- Crypt-Rijndael
- Hook-LexWrap
- CSS-Squish
- CGI-Simple
- Test-use-ok
- CGI-Cookie-Splitter
- CGI.pm
- Jifty
- Number-RecordLocator
- Net-IMAP-Simple
- GD
- Business-OnlinePayment-AuthorizeNet-AIM-ErrorCodes
- Module-Loaded
- Module-Load
- Color-Library
- Tie-Sub
- Graphics-ColorNames
- Graphics-ColorNames-WWW
- Color-Calc
- List-MoreUtils
- Text-Markdown
- HTML-Truncate
- Net-IMAP-Simple-SSL
- Regexp-Common-Email-Address
- HTML-TagCloud
- Time-modules
- Proc-ProcessTable
- DateTime-Format-Mail
- Business-OnlinePayment
- Text-Password-Pronounceable
- Time-Piece
- Test-MockTime
- TermReadKey
- Text-Reform
- Text-Autoformat
- Email-MIME-Attachment-Stripper
- XML-LibXML-Common
- XML-LibXML
- XML-Atom
- Date-Leapyear
- Date-ICal
- Text-Quoted
- Test-Tester
- Test-NoWarnings
- Text-vFile-asData
- Data-ICal
- Email-Abstract
- Email-Reply
- parent
- Carp-Clan
- Bit-Vector
- Date-Calc
- DateTime-Format-Natural
- Date-Extract
- Business-CreditCard
- HTML-Scrubber
- Text-Tags
- Text-FixEOL
- Time-Duration
- Pod-Strip
- rpm-build-perl
- Params-Check
- Module-Load-Conditional
- IPC-Cmd
- Test-Dependencies
- IO-String
- IO-All
- Tie-IxHash
- Text-CSV_XS
- Business-OnlinePayment-AuthorizeNet
- DBD-Pg
- Test-Deep
- JSON-Any
- Net-Twitter
- Chatbot-Eliza
- BTDT