Sign in to PrePAN

PrePAN provides a place
to discuss your modules.


Requests for Reviews Feed

Google::BigQuery Google BigQuery Client Library for Perl

Since Google BigQuery Client Library for Perl has not been provided, I made it. Please see details at

shojikai@github 3 comments

GnuCash::SQLite A module to access GnuCash SQLite files

GnuCash::SQLite provides an API to read account balances and write transactions against a GnuCash set of accounts (only SQLite3 backend supported).

When using the module, always provide account names in full e.g. "Assets:Cash" rather than just "Cash". This lets the module distinguish between accounts with the same name but different parents e.g. Assets:Misc and Expenses:Misc


  1. What might be a better name for this module?
    1. Finance::GnuCash::SQLite

hoekit@github 3 comments

MojoX::Session::Simple Plack::Middleware::Session::Simple adapter for Mojolicious

To provide ability for Mojolicious app to transparently use Plack::Middleware::Session::Simple for session management via PSGI environment variable, $env->{'psgix.session'} and $env->{'psgix.session.options'}.

yowcow@github 0 comments

File::TreeChanges Detect changes in a directory tree, like new or deleted files, or modifications to existing files.

Specified directories are recursively scanned for files matching include and exclude patterns. After each scan, the application can get a list of files added, deleted, or modified since the previous scan.

Changes are detected via readdir() and stat().

The stat() results of the last 2 scans are cached and made available to the application who can inspect it to learn more about the nature of any modifications reported.

edwiny@github 2 comments

Scalar::IfDefined Apply block to scalar depending on whether the scalar is defined.


Takes a block and a scalar value.

If the scalar value is undef, the block is ignored and undef is returned straight away.

If the scalar value is defined, then the block is evaluated with $_ as the value passed in, and the result of the block is returned.

nmbooker@github 1 comment

Games::Dukedom Display agnostic implementation of the big iron game of Dukedom


boftx@github 1 comment

WWW::BetfairNG Object-oriented Perl interface to the Betfair JSON API

Betfair is an online betting exchange which allows registered users to interact with it using a JSON-based API. This module provides an interface to that service which handles the JSON exchange, taking and returning perl data structures (usually hashrefs). Although some checking of the existence of required parameter fields is done, and a listing of the BETFAIR DATA TYPES is provided below, it requires a level of understanding of the Betfair API which is best gained from their own documentation, available from

To use this library, you will need a funded Betfair account and an application key. To use the non-interactive log in, you will also need an SSL certificate and key (in seperate files, rather than a single .pem file). Details of how to create or obtain these, and how to register your certificate with Betfair are also available on the above website. The interactive login does not require an SSL certificate or key and is therefore easier to set up, but Betfair strongly recommend that unattended bots use the non-interactive version.

MyrddinWyllt@github 0 comments

Carp::Proxy Diagnostic delegation

Error messages in Perl are commonly coded with idioms like:

die 'explanation'
    if not $assertion;

The idiom is attractive when the explanation is simple. If an explanation grows to more than a few words, or if it requires calculation, then the surrounding flow becomes disrupted. The solution, of course, is to offload failing assertions to a subroutine.

Subroutines that perform diagnosis, compose error messages and throw exceptions tend to have repeated code at the beginning and end, with unique content somewhere in the middle. Carp::Proxy proposes a wrapper subroutine, called a Proxy, to factor out the repeated sections.

fatal 'user_subroutine'
    if not $assertion;

Proxys, like fatal(), serve as elaborate, customizable replacements for warn(), die() and members of the Carp:: family like confess(). If we look at warn(), die(), confess() and the like, we notice that they are all just different variations on two themes:

  • Add locational context to a user-supplied message.
  • Throw some kind of exception.

Carp::Proxy parameterizes the two themes into attributes of an exception object that is created whenever a Proxy is called. The Proxy passes the object to a user-defined "Handler" subroutine which is responsible for constructing the diagnostic message. When the Handler returns, the Proxy optionally adds "Context" (a stacktrace) to the message and performs "Disposition", typically by calling die().

When the object is constructed it captures the state of Perl's error variables, for later examination by the Handler. The object provides methods that aid in message composition. Attributes control message formatting, stacktrace generation and how Disposition will be handled.

The object overloads Perl's stringification operator with a message rendering method, causing uncaught exceptions to be nicely formatted. Exceptions that are caught can be modified and re-thrown.

thairman@github 1 comment

Bio::ViennaNGS Perl extension for Next-Generation Sequencing analysis

Bio::ViennaNGS is a collection of utilities and subroutines often used for Next-Generation Sequencing (NGS) data analysis. It comes with a set of utility programs for accomplishing routine tasks often required in NGS data processing. The utilities serve as reference implementation of the routines implemented in the library.

mtw@github 2 comments