The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

UnderscoreJS - Perl port of Underscore.js

SYNOPSIS

    use UnderscoreJS;

    _([3, 2, 1])->sort;

DESCRIPTION

UnderscoreJS Perl is a clone of a popular JavaScript library http://github.com/documentcloud/underscore|Underscore.js. Why? Because Perl is awesome. And because we can!

                      /\ \
     __  __    ___    \_\ \     __   _ __   ____    ___    ___   _ __    __
    /\ \/\ \ /' _ `\  /'_` \  /'__`\/\`'__\/',__\  /'___\ / __`\/\`'__\/'__`\
    \ \ \_\ \/\ \/\ \/\ \ \ \/\  __/\ \ \//\__, `\/\ \__//\ \ \ \ \ \//\  __/
     \ \____/\ \_\ \_\ \___,_\ \____\\ \_\\/\____/\ \____\ \____/\ \_\\ \____\
      \/___/  \/_/\/_/\/__,_ /\/____/ \/_/ \/___/  \/____/\/___/  \/_/ \/____/
                                                       ___
                 __                                   /\_ \
                /\_\    ___       _____      __   _ __\//\ \
                \/\ \ /' _ `\    /\ '__`\  /'__`\/\`'__\\ \ \
                 \ \ \/\ \/\ \   \ \ \ \ \/\  __/\ \ \/  \_\ \_
                  \ \_\ \_\ \_\   \ \ ,__/\ \____\\ \_\  /\____\
                   \/_/\/_/\/_/    \ \ \/  \/____/ \/_/  \/____/
                                    \ \_\
                                     \/_/

This document describes the differences. For the full introduction see original page of http://documentcloud.github.com/underscore/|Underscore.js.

The test suite is compatible with the original one, except for those functions that were not ported.

The main differences

All the methods have CamelCase aliases. Use whatever you like. I personally prefer underscores.

Objects are simply hashes, not Perl objects. Maybe objects will be added later.

Of course not everything was ported. Some things don't make any sense for Perl, other are impossible to implement without depending on event loops and async programming.

Implementation details

Most of the functions are just wrappers around built-in functions. Others use List::Util and List::MoreUtils modules.

Numeric/String detection is done the same way JSON::PP does it: by using B hacks.

Boolean values are implemented as overloaded methods, that return numbers or strings depending on the context.

    _->true;
    _->false;

Object-Oriented and Functional Styles

You can use Perl version in either an object-oriented or a functional style, depending on your preference. The following two lines of code are identical ways to double a list of numbers.

    _->map([1, 2, 3], sub { my ($n) = @_; $n * 2; });
    _([1, 2, 3])->map(sub { my ($n) = @_; $n * 2; });

DEVELOPMENT

Repository

    http://github.com/vti/underscore-perl

CREDITS

Undescore.js authors and contributors

AUTHORS

Viacheslav Tykhanovskyi, vti@cpan.org Rich Douglas Evans, rich.douglas.evans@gmail.com

COPYRIGHT AND LICENSE

Copyright (C) 2011-2012, Viacheslav Tykhanovskyi Copyright (C) 2013 Rich Douglas Evans

This program is free software, you can redistribute it and/or modify it under the terms of the Artistic License version 2.0.