Sign in to PrePAN

PrePAN provides a place
to discuss your modules.


Requests for Reviews Feed

Inky Inky templates, in Perl

"Zurb Foundation" has created a nice little HTML superset, called "inky", specifically suited for the creation of HTML emails. It abstracts away some parts of an HTML email which are repeated many times in an email, such as columns or row - or parts which are difficult to get right across mail clients, such as vertical spacers.

This repository is a straight "port" into Perl from their JS/NPM version at

mfontani@github 0 comments

Struct::Diff Recursive diff tools for nested perl structures

Hi all,

I think module will be useful for those writing programs like sync dumpfile < - > API, diff visualizers and so on.

Extra examples:


Thanks =)

mr-mixas@github 0 comments

CheckUpdates::AUR pacman (Arch Linux Package Manager) has "checkupdates" for repo, this is for AUR

3ed@github 4 comments

Games-LatticeGenerator A lattice generator for cut&fold.

The above code will create six PNG images in the current directory, which can be cut and fold together to form a "spaceship". This is a randomized 3D object (not completely random, though, there is some symmetry). It is useful mainly for kids. You may see the result of a similar program at:


Is the name OK? Can I use the "Games" namespace?

pawel_biernacki@twitter 0 comments

Mozilla::CA::Debian Replace Mozilla::CA using certificates from /etc/ssl/certs


Root certificates are a major component of TLS security. Many CPAN modules rely on Mozilla::CA as a default, portable, list of root certificates.

But when relying on Mozilla::CA, we rely on:

  • the maintainer to release often to keep Mozilla::CA in sync with the Mozilla certificates list
  • the maintainer of the module to be trustable (no compromised certificates introduced)
  • yourself or your sysadmin to keep your local copy of Mozilla::CA up to date with the latest CPAN release
  • the CPAN mirror from not being compromised to serve an altered version of Mozilla::CA
  • you can't use additional root certificates installed on your system that are not in Mozilla list (unless the application allow to use multiple certificate databases)
  • you can't filter the Mozilla list to exclude some certificates

This is many risks while on a Debian system you already have a list of certificates that:

  • you already trust for all tasks on your system
  • is updated with other system packages

So Mozilla::CA::Debian replaces Mozilla::CA, providing the same interface (including hijacking the package name) but while using the certificates from /etc/ssl/certs.


The implementation uses lazy loading to build the certificates file (Mozilla::CA exposes the certificate database while Debian exposes a directory of files) only when the VERSION is requested or when SSL_ca_file function is called.

It also allows both Mozilla::CA and Mozilla::CA::Debian to be installed in @INC. Mozilla::CA::Debian will only be used if it is loaded first.

$Mozilla::CA::VERSION reported will be the timestamp of the most recent file in /etc/ssl/certs.


The code is working. POD has to be written (probably will be copied from the block above).


  • I'm not sure about the features. What other system use a directory of PEM files?
  • I'm not sure about the name, as my implementation may work on other systems than Debian.
  • Is hijacking the Mozilla::CA package the right way?

dolmen@github 2 comments

Net::FreeIPA Perl bindings for FreeIPA (using JSON REST API)

Net::FreeIPA is a perl FreeIPA JSON API client class

stdweird@github 1 comment

Crypt::RSA::Simple Encrypts/decrypts text with RSA keys

Crypt::RSA::Simple is just a tiny but flexible wrapper on the top of the Crypt::OpenSSL::RSA library. It encrypts and decrypts any text, and it can generate RSA keys if necessary.

This tool does not give any new features to the original module, rather it wraps it into an easy-to-use form. It offers an elegant, pure Perl OO interface, the procedural interface for encryption and decryption is on the roadmap, as well as a script for key generation.

It uses MIME::Base64 to encode/decode the crypted text, makes it easier to store it on a drive e.g. in a file.

It can be used with other great Perl scripts that do not support text encryption by default, for example with some ssh based automation tools to encrypt ssh keys and passwords.

Is it worth packaging it to CPAN for others to use? Is it a valuable module for anyone else?

stiron@github 0 comments

App-ForKids-LogicalPuzzleGenerator A logical puzzle generator.

It is generating a kind of logical puzzle with minimal information required to solve it.


John,Stephen and James live here. Each has a different favourite fruit (cherries,oranges,strawberries). Each belongs to a different race (dwarf,human,elf).

  • My name is John. I am not a human. James is not a human. James does not like cherries.

  • My name is Stephen. The one who likes cherries is not a human. The one who likes cherries is not a elf. I don't like oranges.


John likes cherries. John is a dwarf. Stephen likes strawberries. Stephen is a human. James likes oranges. James is a elf.

I have some code (not yet integrated) that generates special diagrams for these puzzles. An example is shown at . The questions:

  • is anybody going to use it

  • is the namespace App::ForKids suitable for my generator (how about Games::Puzzles::LogicPuzzleGenerator ?)

pawel_biernacki@twitter 1 comment

Mojo-SlackRTM SlackRTM client using Mojo::IOLoop

Mojo::SlackRTM is a SlackRTM client using Mojo::IOLoop.

Please look at for details.

See also


  • Can I use Mojo namespace?
  • If not, what name do you recommend?

skaji@github 0 comments

Proc::Pathname Retrieves the fully qualified path for the program

A common way to retrieve a path for the program is using the variable $0. However, sometimes it is not working for you. So, you have to find a way to retrieve the path for the program somehow differently.

The module is using system calls to do the job and written as XS module. This module was made for private purposes, mostly, for staticperl.

Ok, this was an introduction part and copy-pasted from the module documentation. Speeking freely, I have made this module because of when using staticperl I was unable to retrieve a correct value of $0 sometimes. And I suppose the module have a limited amount of purposes. I am not sure if it should be uploaded to CPAN, so let's it be here. But, who knows, may be it will be useful for you.

The name of the module was choosen as a combination of well-known system calls on Unix-like systems, more specifically, from Solaris: getexecname(). And, yep, I am not sure if the name is good.

So, if you have something to say, I will be glad to see your comments, suggestions and so on.

gh0stwizard@github 3 comments