Sign in to PrePAN

PrePAN provides a place
to discuss your modules.


Requests for Reviews Feed

Term::CLI CLI interpreter based on Term::ReadLine

Implement an easy-to-use command line interpreter based on Term::ReadLine and Term::ReadLine::Gnu.

First-time users may want to read the documentation for Term::CLI::Tutorial and Term::CLI::Intro first, and peruse the example scripts in the source distribution's examples and tutorial directories.

sbakker@github 1 comment

Database::Accessor Crud for any DB

This is the name I finally came up with following alot of test and prototype code and the comments from this

I check about on Cpan the name space is free


and is is sort where I want it to be

byterock@github 1 comment

GUIDeFATE GUI Designer From A Text Editor

This simplifies GUI development using a textual representation of a interface written in a text editor (monospace font required) as a string and parsed to create an interface without needing to know much about the underlying toolkit (current focus of development is The Wesocket interface, and already includes Wx, Tk, GTk, Win32 and Qt

saiftynet@github 0 comments

Getopts::toHash Take/validate command line arguments

I have never submitted a module before but I think this could be useful to other people as I did a search on cpanm for something that would easily pass a hash back of command line arguments and validate them (Validation is optional). Future plans include custom die messages and aliases for aguments. Let me know what you guys think if this would be useful, If you see anything that wouldnt work, possibly some advice on namespace etc. Thanks

--Validation The Module can validate on 7 Different constraints REGEXP - {'REGEXP=>'^[-+]?[0-9]'} - Specify a regex the passed data must comply with. MINMAX - {'MINMAX'=>{min=>20,max=>40}} - Specify minimum and maximum numbers the argument must be. GREATER_THAN - {'GREATER_THAN'=>{min=>20}} - Specify a minimum number the argument must be. LESS_THAN - {'LESS_THAN'=>{max=>40}} - Specify a maximum number the argument must be lower than. ASCII - ['ASCII'] - The argument must be any ASCII text with spaces allowed. NOSPACES - ['NOSPACES'] - The argument must have no spaces. INT - ['INT'] - The argument must be a number. ANY - ['ANY'] - The argument must be defined.

You can validate each argument on as many types of validation as you want by stringing together each array ref or hash. The Argument must pass each constraint

--Example 1 - Validating with a inline object. $Args->validate( '-a'=>[ 'ASCII','NOSPACES',{ 'MINMAX'=>{min=>20,max=>40} } ] );

--Example 2 - Validating with a hash spec. my %spec = ( '-a'=>[ 'ASCII','NOSPACES', {'MINMAX'=>{min=>20,max=>40} } ] ); $Args->validate(%spec);

The module will display error messages and die on failed validation by default. If you dont want this you can pass... $Args->validate( no_errors=>'1','-a'=>[ 'ASCII','NOSPACES',{ 'MINMAX'=>{min=>20,max=>40} } ] );

ammodules@github 4 comments

State::Tracker Manage states and execute callbacks for predefined states


  • first oop, then overload

  • allow non binary states (dispatch internally)

= Description =

This Modul should help to manager many states in an complex environment.

You can define callbacks for all states & combinations at one place and later change only the $progress.

I use a very simple approach in an old project and i want to make a easy implementation for a new project.

The events only get fired if a related flag/counter is changed.

I am absolute unsure if there are problems with such a interface (overloading) or should i better use simple function calls ($progress->activate(PROGRESS_FIND);)?

Also the signes for setting & checks flags are my first thought, perhaps i should stick with the default binary operators (but i am most of the time confused with them).

Also i guess i need some modes:

  • What if someone registered a event with an exact counter like 10 and later increment this counter by 2 from 9 to 11. Should the event fired or not? (mode => 'singlestep')

    • Otherwise if he use exact counters, he should avoid incrementing by more than 1
  • What is someone want to disallow setting states again? Like PROGRESS_FIND is off and he set PROGRESS_FIND again to off? (mode => 'strict')

  • ggf. einen speed-mode, der davon ausgeht, das bereit nur bitfields genutzt werden?

Sadrak@github 2 comments

Text::Indent::Simple simple indentation

This module is designed to print indented texts produced by many modules that could not know about other modules. Once configured the indentation will be common for all modules printing indented texts.

This module is designed to be used in the simplest way as much as possible. It provides some methods to handle with indentation. Also it doesn't require any extra modules.

ildar-shaimordanov@github 0 comments

Win32::Event2Log This module uses Win32::EventLog and parses windows events and write them to plain logfiles. This module is rule based.

A rule it's a minimal set of conditions to be met to write an entry to a logfile. You must add valid rules before starting the engine.

Once started, the engine will check events every x seconds (specified using interval argument) and for every registry (System, Application, Security, Installation or a user defined one) that is requested at least in one rule will check for an event's source specified and optionally for some text contained in the event's description.

If the rule it's succesfull then an entry it's wrote in the specified logfile. A custom callback can transofrm the line to be wrote using the format option. The parser can optionally shutdown itself if endtime it is specified.

LorenzoTa@github 0 comments

XML::LibXML::Ferry Marshall LibXML nodes and native objects

This along with XML::LibXML::Proxy is my intro to contributing in the CPAN. For the name, like for Proxy I have cleared it with Shlomi Fish, the current maintainer of XML::LibXML, so that part's OK.

This adds a few convenience methods to XML::LibXML::Element, mostly "ferry()" which greatly simplifies the process of marshaling data from Libxml into a native structure of Perl objects/hashes of one's choosing. My upcoming business-related modules depend on this to succinctly express the relationship between its objects and the XML structure it relates to, in "to_node()/from_node()" methods throughout.

This ferry() simplifies traversing and flattening XML structures, into hashes and/or object instances with setter methods.

Also included are helper functions attr(), create() and add() to help creating XML structures.

Test coverage's 100%, so I think I'm all set to upload.

vphantom@github 0 comments

XML::LibXML::Proxy Force LibXML to use a proxy for HTTP(S) external entities

This is my first expedition into CPAN territory. :) For the name, I have the blessing of Shlomi Fish, the current maintainer of XML::LibXML, so that part's settled.

Motivation: my project validates potentially a lot of different DTDs, so I needed to set up some form of local caching. Libxml2's "catalogs" are not appropriate for this because my project doesn't know in advance what versions it'll have to validate (it's not something popular like HTML) and I didn't want to reinvent an entire caching mechanism from scratch. I looked into using XML::LibXML::InputCallback of course, but those cannot be used to override Libxml's built-in "nanohttp" client for HTTP, it only allows adding new protocols. So I resorted to the extreme: XML::LibXML::externalEntityLoader().

With that, I just use LWP::UserAgent to request the URL through the defined proxy, which in my specific case is a local Nginx caching forward proxy.

I documented in KNOWN BUGS that using this quick hack breaks support for "file:///" and other schemes, because externalEntityLoader() is a catch-all. A future version could handle those but I simply had no need for it in my project and wanted to keep things simple.

The core of it is really just a few lines, and I found no elegant tests to include, so "t/" only includes the basics.

vphantom@github 0 comments

Device::TPLink Control TPLink smart home devices with Perl

Device::TPLink is a collection of modules designed to make it easy to control TP-Link's family of smart home products with Perl. They should support all devices that are supported by the Kasa cloud service, but as of now I have only been able to test with the HS200(US) smart light switch and the HS105(US) mini smart plug. If you are on the same LAN as the device (or can reach the device with a TCP connection, you can send commands directly to the device, otherwise you will need to get a token from the Kasa service and interact with the device through the cloud.

This is the first module I've written in many moons and the first that I've thought was worth submitting to CPAN. Before submitting, the module needs to be cleaned up. Right now the POD documentation is largely boilerplate from the module-starter script, and tests need to be written. That said, you can turn lights on and off with this thing right now,

I am not associated with TP-Link in any way, except as a user of their products. The TP-Link protocol information came from several sources, including the "IT Nerd Space" blog, softScheck's "tplink-smartplug" project on GitHub, and GadgetReactor's "pyHS100" project on GitHub.

Feedback is appreciated. I guess that's obvious, since I'm posting here...

verlin@github 0 comments