Tue, 09 Jun 2009
Small Perl Helpers
Permanent link
CoreList
You want to use a module, but you're only allowed to use core modules? Or you want to recommend a module to somebody, and you know it's more likely that he'll use a module if it's in core (and thus he won't hand-roll his crappy CGI parser, and open a wide door to spammers)?
Module::CoreList is
the answer, and it comes with a very handy script called
corelist
:
$ corelist Unicode::Normalize Unicode::Normalize was first released with perl 5.007003 $ corelist DBI DBI was not in CORE (or so I think) # search with regexes $ corelist /Tie/ Pod::Simple::TiedOutFH was first released with perl 5.009003 Tie::Array was first released with perl 5.005 Tie::File was first released with perl 5.007003 Tie::Handle was first released with perl 5.00405 Tie::Hash was first released with perl 5.002 Tie::Hash::NamedCapture was first released with perl 5.009005 Tie::Memoize was first released with perl 5.007003 Tie::RefHash was first released with perl 5.004 Tie::Scalar was first released with perl 5.002 Tie::StdHandle was first released with perl 5.01 Tie::SubstrHash was first released with perl 5.002 TieHash was first released with perl 5
(empty lines sanitized; corelist emits an empty line after each module which is a bit annoying)
Timestamps
Not from CPAN, but a tiny script I wrote:
#!/usr/bin/perl use strict; use warnings; use Time::Local qw(timelocal); if (@ARGV) { my $date = shift @ARGV; if ($date =~ m/^(\d{4})-(\d\d)-(\d\d)$/){ my ($year, $month, $mday) = ($1, $2, $3); my ($hr, $min, $sec) = (0, 0, 0); my $time; if ($time = shift(@ARGV) and $time =~ m/^(\d{1,2}):(\d\d)(?::(\d\d))?$/) { ($hr, $min, $sec) = ($1, $2, $3||0); } print timelocal($sec, $min, $hr, $mday, $month - 1, $year - 1900), $/; } } else { print time, $/; }
If called with no argument it will print the current time as a Unix
timestamp. If called with one or two arguments, it will interpret these as a
date in the YYYY-MM-DD
and a time in HH:MM:SS
format
and print the corresponding timestamp.