view release on metacpan or search on metacpan
a) cause the modified files to carry prominent notices stating that
you changed the files and the date of any change; and
b) cause the whole of any work that you distribute or publish, that
in whole or in part contains the Program or any part thereof, either
with or without modifications, to be licensed at no charge to all
third parties under the terms of this General Public License (except
that you may choose to grant warranty protection to some or all
third parties, at your option).
c) If the modified program normally reads commands interactively when
run, you must cause it, when started running for such interactive use
in the simplest and most usual way, to print or display an
announcement including an appropriate copyright notice and a notice
that there is no warranty (or else, saying that you provide a
warranty) and that users may redistribute the program under these
conditions, and telling the user how to view a copy of this General
Public License.
d) You may charge a fee for the physical act of transferring a
copy, and you may at your option offer warranty protection in
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) 19xx name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the
appropriate parts of the General Public License. Of course, the
commands you use may be called something other than `show w' and `show
c'; they could even be mouse-clicks or menu items--whatever suits your
program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the
program `Gnomovision' (a program to direct compilers to make passes
at assemblers) written by James Hacker.
"class" : "Pod::Weaver::Section::Region",
"name" : "@Author::PERLANCAR/postlude",
"version" : "4.019"
},
{
"class" : "Pod::Weaver::Section::Completion::GetoptLongComplete",
"name" : "@Author::PERLANCAR/Completion::GetoptLongComplete",
"version" : "0.08"
},
{
"class" : "Pod::Weaver::Section::Completion::GetoptLongSubcommand",
"name" : "@Author::PERLANCAR/Completion::GetoptLongSubcommand",
"version" : "0.04"
},
{
"class" : "Pod::Weaver::Section::Completion::GetoptLongMore",
"name" : "@Author::PERLANCAR/Completion::GetoptLongMore",
"version" : "0.001"
},
{
"class" : "Pod::Weaver::Section::Homepage::DefaultCPAN",
"name" : "@Author::PERLANCAR/Homepage::DefaultCPAN",
version: '4.019'
-
class: Pod::Weaver::Section::Region
name: '@Author::PERLANCAR/postlude'
version: '4.019'
-
class: Pod::Weaver::Section::Completion::GetoptLongComplete
name: '@Author::PERLANCAR/Completion::GetoptLongComplete'
version: '0.08'
-
class: Pod::Weaver::Section::Completion::GetoptLongSubcommand
name: '@Author::PERLANCAR/Completion::GetoptLongSubcommand'
version: '0.04'
-
class: Pod::Weaver::Section::Completion::GetoptLongMore
name: '@Author::PERLANCAR/Completion::GetoptLongMore'
version: '0.001'
-
class: Pod::Weaver::Section::Homepage::DefaultCPAN
name: '@Author::PERLANCAR/Homepage::DefaultCPAN'
version: '0.05'
-
Instead of just printing some info, why not make it an Acme::PM or
Acme::PerlMongers like Acme::CPANAuthors? Various stats can then be
produced about the various Perl Mongers. <br>
App::multiwhich
Note that File::Which can also search for all matches too if you use
it in a list context, e.g. @paths = which('foo'). File::Which also
comes with a pwhich CLI utility which also accepts multiple
arguments and has the -a switch to print all matches. The output
format is slightly different than 'multiwhich' though. <br><br>In
fact, the Unix 'which' command (or at least its Debian variant) also
sports the -a switch.
Object::Anon
Author: ROBN <https://metacpan.org/author/ROBN>
Nice idea. Some notes: 1) to be widely used, it really needs to be
very efficient; 2) if the goal is simply to objectify a hash,
perhaps Hash::Objectify or Object::From::Hash or Hash::To::Object
(or Data::Objectify and so on) is a more descriptive name. <br>
Or at least pick the alternatives which are based on Getopt::Long,
instead of those that reinvent the wheel and do their own option
parsing. <br><br>Most other modules that reinvent option parsing
either don't bother to do short option bundling (-abc instead of -a
-b -c), or abbreviation (--long-o instead --long-option-name), or
the choice to (dis)allow mix-mashing options and arguments, or
support '--' to end option processing, or respect ordering, or
support multiple options (--verbose --verbose), or support
'--foo=val' *as well as* '--foo val', and so on. These are features
and conveniences that are taken for granted by people working daily
in Unix command-line. <br>
Text::Table::Tiny
Author: NEILB <https://metacpan.org/author/NEILB>
Very fast, several times faster than Text::TabularDisplay or
Text::Table (and many times faster than the other slower
table-generator modules). It uses sprintf() to format a whole row
instead of formatting each cell separately using sprintf() and
joining cells together with join(). <br><br>I did a comparison in:
<a
Author: DAGOLDEN <https://metacpan.org/author/DAGOLDEN>
Overall looks ok, with the exception that it does not look and feel
like a regular Perl hash at all. Now someone just needs to create a
tie interface on top of this :) <br>
App::whatthecommit
Author: MUDLER <https://metacpan.org/author/MUDLER>
From the description: "App::whatthecommit is just another
lazy-to-lazy line command utility." I'd thought the definition
of laziness would be something like 'alias gc=git commit
--allow-empty-message'. This is more like hubris. Or whatever. :)
<br>
Opt::Imistic
Author: ALTREUS <https://metacpan.org/author/ALTREUS>
Very nifty for short scripts and some clever design inside (all
options are stored as arrayref, but there is some overloading to
make getting boolean/flag and normal scalar value convenient).
producing trace file, and another for reading this file). And I'm
probably an idiot, but I can't get this module to work for me.
<br><br>One alternative if you're looking for a similar module is
Debug::LTrace. <br><br>
Devel::TraceSubs
Author: PARTICLE <https://metacpan.org/author/PARTICLE>
For an alternative, try Debug::LTrace, which roughly provides the
same basic feature but is more convenient to use from the
command-line and give extra information like timing. <br><br>
Devel::TraceCalls
Author: COSIMO <https://metacpan.org/author/COSIMO>
Might be powerful and flexible, but not convenient to use especially
from command-line. (I was searching for something like "strace
for Perl function"). <br>
Debug::LTrace
Author: KOORCHIK <https://metacpan.org/author/KOORCHIK>
One of the more convenient and usable subroutine tracing modules on
CPAN. If you're looking for something like "strace for Perl
functions", try this. <br>
Debug::Trace
IPC::System::Simple
Author: JKEENAN <https://metacpan.org/author/JKEENAN>
This is a well-designed module with a good interface. The core
system()'s behavior of whether to invoke shell or not depending on
the number of arguments is ... unfortunate. This module fixes that.
<br><br>However, the previous review's comparing of
IPC::System::Simple with IPC::Run or IPC::Simple is rather
misguided. They focus on different things: IPC::System::Simple
focuses on providing shell/no-shell versions of invoking commands
and making a command's result easier to parse. It does not support
feeding text to STDIN, handlers for STDOUT/STDERR, timeouts, or the
other features that IPC::{Run,Cmd} support.
IPC::Cmd
Author: BINGOS <https://metacpan.org/author/BINGOS>
IPC::Cmd does its job, but the interface is inconsistent, probably
because a different author wrote run_forked() (and didn't follow the
same convention). run() accepts a hash of arguments, but
run_forked() accepts a scalar + hashref. run() returns a list, but
default export the default exports. <br><br>Basically Xporter is
just Exporter with a different default (not arguably better or more
user-friendly). For the sake of minimizing surprise to my users, I
would avoid the use of Xporter. <br><br>UPDATE 2014-01-24: some
edits. I appreciate the effort of the author to defend her module,
though I am not convinced by her arguments.
Dist::Zilla::Shell
Author: DOLMEN <https://metacpan.org/author/DOLMEN>
Nice tool that lets you type dzil commands like 'build', 'test', etc
while sending all the other unknown commands like 'ls -l', 'man Foo'
to the underlying shell. Also lets you avoid multiple startup
overhead of dzil :-)
CPANPLUS::Shell::Curses
Author: MARCUS <https://metacpan.org/author/MARCUS>
Unmaintained. Installs but no longer runs.
Rating: 2/10
Rating: 2/10
App::Options
Author: SPADKINS <https://metacpan.org/author/SPADKINS>
2010-10-13: <br><br>I admit, this is not the most flexible
configuration framework out there as it enforces some convention.
And I don't/can't use it on every project. But it's certainly one of
the easiest. You can slap a few lines of options declaration in your
code and voila, your script suddenly can accept command line
arguments, has --help message et al, read from config files (in
several preset locations). <br><br>There are still a few annoyances
(I submitted them in the RT), but in general, this is a very handy
module to use for lazy coders who just want to accept
configuration/options from outside the code. <br><br><shameless
plug>I'm trying to do somewhat the same with Config::Tree, but as
of now the module is not really done yet.</shameless plug>
<br><br>UPDATE 2013-08-15: <br><br>I'm reducing the ratings from 5
to 2. I've now avoided using this module due to two lingering issue
since 2010: 1) App::Options does not accept '--opt val', only
'--opt=val' which is incompatible with how most command-line
programs work, causing confusion for some of my users. 2) 'perl -c'
doesn't work under this module, it will still trigger command-line
processing. <br><br>I'm now using Perinci::CmdLine as replacement,
but I cannot recommend it in general, as the two modules are not
equivalent.
Rating: 4/10
Filesys::Notify::Simple
Author: MIYAGAWA <https://metacpan.org/author/MIYAGAWA>
It's rather unfortunate that currently the choice for general
add builtin support for Regexp object already! It's almost 2013,
Regexp object has been around for, what, more than a decade? I can
understand not supporting serializing filehandle or coderef, but
Regexp object?
Rating: 2/10
WWW::YouTube::Download
Author: OALDERS <https://metacpan.org/author/OALDERS>
Works for me too ATM. I've tried several command-line scripts (most
of them Python-based, like youtube-dl, tubenick, etc). Sometimes
they work, sometimes they broke. It's the nature of this kind of
script. The quality comes from persistence. This module has been
maintained since 2009, through several YouTube's changes. I commend
the author, good job, and thanks!
Number::Zero
From the module's POD: "The number zero and undef are difficult
to determine in Perl." <br><br>Are they? <br><br>say
!defined($data) ? "undef" : "not undef";
Author: TIMB <https://metacpan.org/author/TIMB>
Wow, just wow. Hopefully now that we can use this tool to know how
big things are, we are encouraged to create leaner, faster, more
efficient Perl modules.
Oktest
Author: KWATCH <https://metacpan.org/author/KWATCH>
A reinvention of Perl testing modules (it even comes with an
equivalent for 'prove' command), with probably no added features and
some added quirks. (Nested) topic can already be done using
Test::More's subtests. Filtering and setup/teardown can be done with
Test::Class. And I am supposed to replace specific assertion
functions (with specific, helpful error messages) like is(), isnt(),
like(), is_deeply(), etc with just OK()? <br>
Rating: 4/10
HTML::Escape
Author: TOKUHIROM <https://metacpan.org/author/TOKUHIROM>
Clone::Fast
Casual benchmarking on my PC shows that Data::Clone is up to twice
faster than this.
Rating: 6/10
Perl::Strip
Author: MLEHMANN <https://metacpan.org/author/MLEHMANN>
Balancing previous unhelpful review. Slowish (can't complain,
PPI-based) but works and comes with a command-line utility.
<br><br>Beware though that the command-line utility modifies file in
place without backup, without warning, and without option to create
backup. <br>
Rating: 8/10
Perl::Squish
Author: ADAMK <https://metacpan.org/author/ADAMK>
Have failed to build for 1.5 years (reported bug RT#66958 left
untouched, users need to install Module::Install first). No usage
Carp::Always::Color
Author: DOY <https://metacpan.org/author/DOY>
Like Carp::Always? Want something better? Here it is. <br>
CHI Author: ASB <https://metacpan.org/author/ASB>
The DBI of caching. Stop reinventing your caching framework and just
use this. <br><br>UPDATE 2013-01-16: unfortunately, the use of Moose
reduces the usefulness of CHI for command-line scripts (0.2s/146
files/53k lines startup overhead just to initialize a File cache).
So 4 stars instead of 5. Let's hope the author migrates to Moo
someday. <br>
Rating: 8/10
Monkey::Patch
Author: FRODWITH <https://metacpan.org/author/FRODWITH>
Compared to several other monkey-patching modules (like Sub::Monkey
that I'm handling. <br>
PerlX::Perform
Author: TOBYINK <https://metacpan.org/author/TOBYINK>
I personally don't see much value of this syntactic sugar since Perl
already allows us to express clearly. Pick one: <br><br>for ($foo) {
say $_ if defined } <br><br>for (grep {defined} $foo) { say $_ }
<br><br>do { say $_ if defined } for $foo <br><br>say $_ for grep
{defined} $foo <br><br>And save yourself from having to remember
whether we should add a comma or not before "wherever".
<br>
TOBYINK::PerlX::A
I have nothing against bundles like this, but beware that adding
'use TOBYINK::PerlX::A' will cause Perl to load 460 files and
compile +- 160k lines (takes 1s on my Core i5 machine and 8s on my
Atom netbook).
WWW::Google::Images
Just adding a note that this module is unmaintained (as expressed by
Passwd::Unix
Author: STRZELEC <https://metacpan.org/author/STRZELEC>
No tests. No detailed error status, only true/false (yes, there is a
'warnings' parameter on constructor, but this doesn't give out
warnings on all operations, only some). No locking (although there
is backup, but still). <br><br>Also, some weird choices, why use
bzip2 when creating backup? Or, why still require running as root
(checking $() if we are allowing custom database file location?
<br><br>Between this and Unix::ConfigFile, I'm seriously considering
using Unix commands instead (useradd, userdel, gpasswd, et al).
<br><br>UPDATE 2011-04-21: I created a fork of Passwd::Unix 0.52
called Passwd::Unix::Alt instead, which add some tests and
modifications. Try it out if your needs are also not met by
Passwd::Unix. <br><br>UPDATE 2012-08-30: I created a new module
called Unix::Passwd::File. Try it out if your needs are also not met
by Passwd::Unix.
Rating: 2/10
Unix::ConfigFile
total size of the downloadable files so I can be pretty sure that
when I leave my server for days/weeks, I don't run out of disk space
because I put in too many torrent files. <br>
Module::CoreList
Author: BINGOS <https://metacpan.org/author/BINGOS>
Wow, I was thinking the same exact "godsend" too and turns
out some other reviewer already said so. Very very helpful to assist
deployment and pick modules to use. I personally made a couple of
command-line scripts like pm-in-core or core-since-when to save some
typing. <br>
WWW::Mechanize
Author: SIMBABQUE <https://metacpan.org/author/SIMBABQUE>
WWW::Mechanize is of course one of the indispensable tools for any
web programmer or admin. The current problem is the proliferation of
3rd party subclasses, the functionalities of which cannot be used
together. So you want a polite Mechanize which does
self-rate-limiting and uses the Firefox or IE engine? A subclass
that you can check Pond syntax using a single regex. But apart from
that, there's nothing compelling in using Pond to serialize data.
Rating: 4/10
File::Which
Author: PLICEASE <https://metacpan.org/author/PLICEASE>
You can always count on CPAN to have prewritten modules for various
things, including this one. I've never bothered before about
portability and just rely on the "which" command, but for
one reason there's a time when I just couldn't do that. <br><br>Btw,
there's also File::Which::Cached.
String::ShellQuote
Author: ROSCH <https://metacpan.org/author/ROSCH>
I admit it. Ever since I know about escapeshellarg() and
escapeshellcmd() in PHP, I've been reimplementing this function in
Perl literally a million of times (mostly because of laziness and
because it only takes a couple of lines in Perl). Only a few months
or Acme::CM::Get:
% perl -MAcme::CM::Get=Import::CPANRatings::User::stevenharyanto -E'say $_->{module} for @{ $LIST->{entries} }' | cpanm -n
or directly:
% perl -MAcme::CPANModules::Import::CPANRatings::User::stevenharyanto -E'say $_->{module} for @{ $Acme::CPANModules::Import::CPANRatings::User::stevenharyanto::LIST->{entries} }' | cpanm -n
This Acme::CPANModules module also helps lcpan produce a more meaningful
result for "lcpan related-mods" command when it comes to finding related
modules for the modules listed in this Acme::CPANModules module. See
App::lcpan::Cmd::related_mods for more details on how "related modules"
are found.
HOMEPAGE
Please visit the project's homepage at
<https://metacpan.org/release/Acme-CPANModules-Import-CPANRatings-User-s
tevenharyanto>.
SOURCE
devdata/stevenharyanto view on Meta::CPAN
(<a href="https://metacpan.org/release/App-multiwhich/">0.001</a>)
</h3>
<blockquote class="review_text">
Note that File::Which can also search for all matches too if you use it in a list context, e.g. @paths = which('foo'). File::Which also comes with a pwhich CLI utility which also accepts multiple arguments and has the -a switch to print all matches. ...
</blockquote>
<div class="review_footer">
<p class="review_attribution">
<a href="/user/stevenharyanto">Steven Haryanto</a> - 2014-08-16T22:34:39
(<a href="/dist/App-multiwhich#11878">permalink</a>)
</p>
<div class="helpfulq">
devdata/stevenharyanto view on Meta::CPAN
<img src="//cdn.perl.org/perlweb/cpanratings/images/stars-5.0.png" alt="*****">
</h3>
<blockquote class="review_text">
Having worked for quite some time with option processing and several other similar modules, I have to say that most of the time you probably want to use Getopt::Long instead of the other alternatives. Or at least pick the alternatives which are based...
</blockquote>
<div class="review_footer">
<p class="review_attribution">
<a href="/user/stevenharyanto">Steven Haryanto</a> - 2014-07-26T22:11:10
(<a href="/dist/Getopt-Long#11844">permalink</a>)
</p>
devdata/stevenharyanto view on Meta::CPAN
(<a href="https://metacpan.org/release/App-whatthecommit/">0.01</a>)
</h3>
<blockquote class="review_text">
From the description: "App::whatthecommit is just another lazy-to-lazy line command utility." I'd thought the definition of laziness would be something like 'alias gc=git commit --allow-empty-message'. This is more like hubris. Or whatever....
</blockquote>
<div class="review_footer">
<p class="review_attribution">
<a href="/user/stevenharyanto">Steven Haryanto</a> - 2014-07-03T04:17:27
(<a href="/dist/App-whatthecommit#11816">permalink</a>)
</p>
devdata/stevenharyanto view on Meta::CPAN
(<a href="https://metacpan.org/release/Devel-TraceSubs/">0.02</a>)
</h3>
<blockquote class="review_text">
For an alternative, try Debug::LTrace, which roughly provides the same basic feature but is more convenient to use from the command-line and give extra information like timing.
<br><br>
</blockquote>
<div class="review_footer">
<p class="review_attribution">
<a href="/user/stevenharyanto">Steven Haryanto</a> - 2014-06-22T02:26:37
(<a href="/dist/Devel-TraceSubs#11808">permalink</a>)
</p>
<div class="helpfulq">
devdata/stevenharyanto view on Meta::CPAN
(<a href="https://metacpan.org/release/Devel-TraceCalls/">0.04</a>)
</h3>
<blockquote class="review_text">
Might be powerful and flexible, but not convenient to use especially from command-line. (I was searching for something like "strace for Perl function").
<br>
</blockquote>
<div class="review_footer">
<p class="review_attribution">
<a href="/user/stevenharyanto">Steven Haryanto</a> - 2014-06-22T02:25:06
(<a href="/dist/Devel-TraceCalls#11806">permalink</a>)
</p>
devdata/stevenharyanto view on Meta::CPAN
(<a href="https://metacpan.org/release/IPC-System-Simple/">1.25</a>)
</h3>
<blockquote class="review_text">
This is a well-designed module with a good interface. The core system()'s behavior of whether to invoke shell or not depending on the number of arguments is ... unfortunate. This module fixes that.
<br><br>However, the previous review's comparing of ...
</blockquote>
<div class="review_footer">
<p class="review_attribution">
<a href="/user/stevenharyanto">Steven Haryanto</a> - 2014-03-18T03:41:17
(<a href="/dist/IPC-System-Simple#11620">permalink</a>)
</p>
<div class="helpfulq">
devdata/stevenharyanto view on Meta::CPAN
<img src="//cdn.perl.org/perlweb/cpanratings/images/stars-5.0.png" alt="*****">
</h3>
<blockquote class="review_text">
Nice tool that lets you type dzil commands like 'build', 'test', etc while sending all the other unknown commands like 'ls -l', 'man Foo' to the underlying shell. Also lets you avoid multiple startup overhead of dzil :-)
</blockquote>
<div class="review_footer">
<p class="review_attribution">
<a href="/user/stevenharyanto">Steven Haryanto</a> - 2013-11-12T20:03:32
(<a href="/dist/Dist-Zilla-Shell#11406">permalink</a>)
</p>
<div class="helpfulq">
devdata/stevenharyanto view on Meta::CPAN
<img src="//cdn.perl.org/perlweb/cpanratings/images/stars-2.0.png" alt="**">
</h3>
<blockquote class="review_text">
2010-10-13:
<br><br>I admit, this is not the most flexible configuration framework out there as it enforces some convention. And I don't/can't use it on every project. But it's certainly one of the easiest. You can slap a few lines of options declara...
</blockquote>
<div class="review_footer">
<p class="review_attribution">
<a href="/user/stevenharyanto">Steven Haryanto</a> - 2013-08-14T20:58:18
(<a href="/dist/App-Options#7770">permalink</a>)
</p>
<div class="helpfulq">
devdata/stevenharyanto view on Meta::CPAN
<img src="//cdn.perl.org/perlweb/cpanratings/images/stars-5.0.png" alt="*****">
</h3>
<blockquote class="review_text">
Works for me too ATM. I've tried several command-line scripts (most of them Python-based, like youtube-dl, tubenick, etc). Sometimes they work, sometimes they broke. It's the nature of this kind of script. The quality comes from persistence. This mod...
</blockquote>
<div class="review_footer">
<p class="review_attribution">
<a href="/user/stevenharyanto">Steven Haryanto</a> - 2012-11-16T10:32:28
(<a href="/dist/WWW-YouTube-Download#10550">permalink</a>)
</p>
<div class="helpfulq">
devdata/stevenharyanto view on Meta::CPAN
<img src="//cdn.perl.org/perlweb/cpanratings/images/stars-2.0.png" alt="**">
</h3>
<blockquote class="review_text">
A reinvention of Perl testing modules (it even comes with an equivalent for 'prove' command), with probably no added features and some added quirks. (Nested) topic can already be done using Test::More's subtests. Filtering and setup/teardown can be d...
</blockquote>
<div class="review_footer">
<p class="review_attribution">
<a href="/user/stevenharyanto">Steven Haryanto</a> - 2012-10-09T17:30:27
(<a href="/dist/Oktest#10426">permalink</a>)
</p>
devdata/stevenharyanto view on Meta::CPAN
<img src="//cdn.perl.org/perlweb/cpanratings/images/stars-4.0.png" alt="****">
</h3>
<blockquote class="review_text">
Balancing previous unhelpful review. Slowish (can't complain, PPI-based) but works and comes with a command-line utility.
<br><br>Beware though that the command-line utility modifies file in place without backup, without warning, and without option t...
</blockquote>
<div class="review_footer">
<p class="review_attribution">
<a href="/user/stevenharyanto">Steven Haryanto</a> - 2012-09-13T17:42:33
(<a href="/dist/Perl-Strip#10376">permalink</a>)
</p>
devdata/stevenharyanto view on Meta::CPAN
<img src="//cdn.perl.org/perlweb/cpanratings/images/stars-4.0.png" alt="****">
</h3>
<blockquote class="review_text">
The DBI of caching. Stop reinventing your caching framework and just use this.
<br><br>UPDATE 2013-01-16: unfortunately, the use of Moose reduces the usefulness of CHI for command-line scripts (0.2s/146 files/53k lines startup overhead just to initia...
</blockquote>
<div class="review_footer">
<p class="review_attribution">
<a href="/user/stevenharyanto">Steven Haryanto</a> - 2012-04-24T05:20:53
(<a href="/dist/CHI#9834">permalink</a>)
</p>
devdata/stevenharyanto view on Meta::CPAN
(<a href="https://metacpan.org/release/PerlX-Perform/">0.004</a>)
</h3>
<blockquote class="review_text">
I personally don't see much value of this syntactic sugar since Perl already allows us to express clearly. Pick one:
<br><br>for ($foo) { say $_ if defined }
<br><br>for (grep {defined} $foo) { say $_ }
<br><br>do { say $_ if defined } for $foo
<br><...
</blockquote>
<div class="review_footer">
<p class="review_attribution">
<a href="/user/stevenharyanto">Steven Haryanto</a> - 2012-03-05T06:16:12
(<a href="/dist/PerlX-Perform#9684">permalink</a>)
</p>
devdata/stevenharyanto view on Meta::CPAN
<img src="//cdn.perl.org/perlweb/cpanratings/images/stars-1.0.png" alt="*">
</h3>
<blockquote class="review_text">
No tests. No detailed error status, only true/false (yes, there is a 'warnings' parameter on constructor, but this doesn't give out warnings on all operations, only some). No locking (although there is backup, but still).
<br><br>Also, some weird cho...
</blockquote>
<div class="review_footer">
<p class="review_attribution">
<a href="/user/stevenharyanto">Steven Haryanto</a> - 2011-04-20T06:02:56
(<a href="/dist/Passwd-Unix#8474">permalink</a>)
</p>
<div class="helpfulq">
devdata/stevenharyanto view on Meta::CPAN
<img src="//cdn.perl.org/perlweb/cpanratings/images/stars-5.0.png" alt="*****">
</h3>
<blockquote class="review_text">
Wow, I was thinking the same exact "godsend" too and turns out some other reviewer already said so. Very very helpful to assist deployment and pick modules to use. I personally made a couple of command-line scripts like pm-in-core or core-s...
</blockquote>
<div class="review_footer">
<p class="review_attribution">
<a href="/user/stevenharyanto">Steven Haryanto</a> - 2010-11-24T09:29:57
(<a href="/dist/Module-CoreList#7886">permalink</a>)
</p>
devdata/stevenharyanto view on Meta::CPAN
<img src="//cdn.perl.org/perlweb/cpanratings/images/stars-5.0.png" alt="*****">
</h3>
<blockquote class="review_text">
You can always count on CPAN to have prewritten modules for various things, including this one. I've never bothered before about portability and just rely on the "which" command, but for one reason there's a time when I just couldn't do tha...
</blockquote>
<div class="review_footer">
<p class="review_attribution">
<a href="/user/stevenharyanto">Steven Haryanto</a> - 2010-08-25T11:19:36
(<a href="/dist/File-Which#7640">permalink</a>)
</p>
<div class="helpfulq">
lib/Acme/CPANModules/Import/CPANRatings/User/stevenharyanto.pm view on Meta::CPAN
package Acme::CPANModules::Import::CPANRatings::User::stevenharyanto;
use strict;
our $AUTHORITY = 'cpan:PERLANCAR'; # AUTHORITY
our $DATE = '2023-10-29'; # DATE
our $DIST = 'Acme-CPANModules-Import-CPANRatings-User-stevenharyanto'; # DIST
our $VERSION = '0.002'; # VERSION
our $LIST = {description=>"This list is generated by scraping CPANRatings (cpanratings.perl.org) user page.",entries=>[{description=>"\n(REMOVED)\n",module=>"Log::Any",rating=>undef},{description=>"\nProvides a thin/lightweight OO interface for \$?, ...
1;
# ABSTRACT: List of modules mentioned by CPANRatings user stevenharyanto
__END__
=pod
=encoding UTF-8
lib/Acme/CPANModules/Import/CPANRatings/User/stevenharyanto.pm view on Meta::CPAN
Author: L<PTC|https://metacpan.org/author/PTC>
Instead of just printing some info, why not make it an Acme::PM or Acme::PerlMongers like Acme::CPANAuthors? Various stats can then be produced about the various Perl Mongers.
<br>
=item L<App::multiwhich>
Note that File::Which can also search for all matches too if you use it in a list context, e.g. @paths = which('foo'). File::Which also comes with a pwhich CLI utility which also accepts multiple arguments and has the -a switch to print all matches. ...
<br><br>In fact, the Unix 'which' command (or at least its Debian variant) also sports the -a switch.
=item L<Object::Anon>
Author: L<ROBN|https://metacpan.org/author/ROBN>
Nice idea. Some notes: 1) to be widely used, it really needs to be very efficient; 2) if the goal is simply to objectify a hash, perhaps Hash::Objectify or Object::From::Hash or Hash::To::Object (or Data::Objectify and so on) is a more descriptive na...
<br>
lib/Acme/CPANModules/Import/CPANRatings/User/stevenharyanto.pm view on Meta::CPAN
<br>
'
<br><br>
=item L<Getopt::Long>
Author: L<JV|https://metacpan.org/author/JV>
Having worked for quite some time with option processing and several other similar modules, I have to say that most of the time you probably want to use Getopt::Long instead of the other alternatives. Or at least pick the alternatives which are based...
<br><br>Most other modules that reinvent option parsing either don't bother to do short option bundling (-abc instead of -a -b -c), or abbreviation (--long-o instead --long-option-name), or the choice to (dis)allow mix-mashing options and arguments, ...
<br>
=item L<Text::Table::Tiny>
Author: L<NEILB|https://metacpan.org/author/NEILB>
Very fast, several times faster than Text::TabularDisplay or Text::Table (and many times faster than the other slower table-generator modules). It uses sprintf() to format a whole row instead of formatting each cell separately using sprintf() and joi...
<br><br>I did a comparison in: <a href="http://blogs.perl.org/users/steven_haryanto/2014/07/benchmarking-several-ascii-table-generator-modules.html" rel="nofollow">blogs.perl.org/users/steven_haryanto/...</a>
lib/Acme/CPANModules/Import/CPANRatings/User/stevenharyanto.pm view on Meta::CPAN
Author: L<DAGOLDEN|https://metacpan.org/author/DAGOLDEN>
Overall looks ok, with the exception that it does not look and feel like a regular Perl hash at all. Now someone just needs to create a tie interface on top of this :)
<br>
=item L<App::whatthecommit>
Author: L<MUDLER|https://metacpan.org/author/MUDLER>
From the description: "App::whatthecommit is just another lazy-to-lazy line command utility." I'd thought the definition of laziness would be something like 'alias gc=git commit --allow-empty-message'. This is more like hubris. Or whatever....
<br>
=item L<Opt::Imistic>
Author: L<ALTREUS|https://metacpan.org/author/ALTREUS>
Very nifty for short scripts and some clever design inside (all options are stored as arrayref, but there is some overloading to make getting boolean/flag and normal scalar value convenient).
<br><br>For more "proper" scripts though (anything above say 20-30 lines) I'd recommend using something like Getopt::Long with a real spec. Some of the features I like in G::L not in Opt::Imistic: the ability to get --noOPT for free for fla...
lib/Acme/CPANModules/Import/CPANRatings/User/stevenharyanto.pm view on Meta::CPAN
The doc looks promising, it really looks like it could be the "strace for Perl functions", but the usage is awkward (you have to open two terminals, one for running your program and producing trace file, and another for reading this file). ...
<br><br>One alternative if you're looking for a similar module is Debug::LTrace.
<br><br>
=item L<Devel::TraceSubs>
Author: L<PARTICLE|https://metacpan.org/author/PARTICLE>
For an alternative, try Debug::LTrace, which roughly provides the same basic feature but is more convenient to use from the command-line and give extra information like timing.
<br><br>
=item L<Devel::TraceCalls>
Author: L<COSIMO|https://metacpan.org/author/COSIMO>
Might be powerful and flexible, but not convenient to use especially from command-line. (I was searching for something like "strace for Perl function").
<br>
=item L<Debug::LTrace>
Author: L<KOORCHIK|https://metacpan.org/author/KOORCHIK>
One of the more convenient and usable subroutine tracing modules on CPAN. If you're looking for something like "strace for Perl functions", try this.
<br>
lib/Acme/CPANModules/Import/CPANRatings/User/stevenharyanto.pm view on Meta::CPAN
Thanks for providing a pure-Perl alternative for deep cloning. Otherwise we are stuck with core module Storable's dclone, which cannot handle Regexp objects out of the box, must use deparse to handle coderefs, and not to mention is not as fast as it ...
<br><br>Of course, there are faster XS-based cloning modules on CPAN (all currently non-core, believe it or not there are no core modules for cloning except Storable). I'd recommend Data::Clone. But it's nice to have a pure-Perl implementation, e.g. ...
=item L<IPC::System::Simple>
Author: L<JKEENAN|https://metacpan.org/author/JKEENAN>
This is a well-designed module with a good interface. The core system()'s behavior of whether to invoke shell or not depending on the number of arguments is ... unfortunate. This module fixes that.
<br><br>However, the previous review's comparing of IPC::System::Simple with IPC::Run or IPC::Simple is rather misguided. They focus on different things: IPC::System::Simple focuses on providing shell/no-shell versions of invoking commands and making...
=item L<IPC::Cmd>
Author: L<BINGOS|https://metacpan.org/author/BINGOS>
IPC::Cmd does its job, but the interface is inconsistent, probably because a different author wrote run_forked() (and didn't follow the same convention). run() accepts a hash of arguments, but run_forked() accepts a scalar + hashref. run() returns a ...
=item L<Umask::Local>
lib/Acme/CPANModules/Import/CPANRatings/User/stevenharyanto.pm view on Meta::CPAN
<br><br>use SomeModule qw(a b c);
<br><br>normally they will expect only a, b, and c are exported. If SomeModule uses Xporter, it will also by default export the default exports.
<br><br>Basically Xporter is just Exporter with a different default (not arguably better or more user-friendly). For the sake of minimizing surprise to my users, I would avoid the use of Xporter.
<br><br>UPDATE 2014-01-24: some edits. I appreciate the effort of the author to defend her module, though I am not convinced by her arguments.
=item L<Dist::Zilla::Shell>
Author: L<DOLMEN|https://metacpan.org/author/DOLMEN>
Nice tool that lets you type dzil commands like 'build', 'test', etc while sending all the other unknown commands like 'ls -l', 'man Foo' to the underlying shell. Also lets you avoid multiple startup overhead of dzil :-)
=item L<CPANPLUS::Shell::Curses>
Author: L<MARCUS|https://metacpan.org/author/MARCUS>
Unmaintained. Installs but no longer runs.
Rating: 2/10
lib/Acme/CPANModules/Import/CPANRatings/User/stevenharyanto.pm view on Meta::CPAN
It's faster than Unicode::GCString->new($str)->columns, but it gives wrong answers to lots of characters, e.g. control characters like "\n", "\t", etc are currently assumed to have width of -1 character. You're better off wi...
Rating: 2/10
=item L<App::Options>
Author: L<SPADKINS|https://metacpan.org/author/SPADKINS>
2010-10-13:
<br><br>I admit, this is not the most flexible configuration framework out there as it enforces some convention. And I don't/can't use it on every project. But it's certainly one of the easiest. You can slap a few lines of options declaration in your...
<br><br>There are still a few annoyances (I submitted them in the RT), but in general, this is a very handy module to use for lazy coders who just want to accept configuration/options from outside the code.
<br><br><shameless plug>I'm trying to do somewhat the same with Config::Tree, but as of now the module is not really done yet.</shameless plug>
<br><br>UPDATE 2013-08-15:
<br><br>I'm reducing the ratings from 5 to 2. I've now avoided using this module due to two lingering issue since 2010: 1) App::Options does not accept '--opt val', only '--opt=val' which is incompatible with how most command-line programs work, caus...
<br><br>I'm now using Perinci::CmdLine as replacement, but I cannot recommend it in general, as the two modules are not equivalent.
Rating: 4/10
=item L<Filesys::Notify::Simple>
Author: L<MIYAGAWA|https://metacpan.org/author/MIYAGAWA>
It's rather unfortunate that currently the choice for general purpose cross-platform filesystem notification modules on CPAN falls between this module (FNS) or File::ChangeNotify (F::CN). The other CPAN modules are either OS-/framework-specific.
lib/Acme/CPANModules/Import/CPANRatings/User/stevenharyanto.pm view on Meta::CPAN
Balancing previous glowing reviews. Storable has it faults, for example historically its track record for file format backwards compatibility is poor, making programs fail when loading Storable files after the module is upgraded.
<br><br>Also, more importantly, add builtin support for Regexp object already! It's almost 2013, Regexp object has been around for, what, more than a decade? I can understand not supporting serializing filehandle or coderef, but Regexp object?
Rating: 2/10
=item L<WWW::YouTube::Download>
Author: L<OALDERS|https://metacpan.org/author/OALDERS>
Works for me too ATM. I've tried several command-line scripts (most of them Python-based, like youtube-dl, tubenick, etc). Sometimes they work, sometimes they broke. It's the nature of this kind of script. The quality comes from persistence. This mod...
=item L<Number::Zero>
From the module's POD: "The number zero and undef are difficult to determine in Perl."
<br><br>Are they?
<br><br>say !defined($data) ? "undef" : "not undef";
<br><br>say defined($data) && $data==0 ? "zero" : "not zero"; # yes, warn if non-numeric
<br><br>use Scalar::Util 'looks_like_number';
<br>
lib/Acme/CPANModules/Import/CPANRatings/User/stevenharyanto.pm view on Meta::CPAN
Author: L<TIMB|https://metacpan.org/author/TIMB>
Wow, just wow. Hopefully now that we can use this tool to know how big things are, we are encouraged to create leaner, faster, more efficient Perl modules.
=item L<Oktest>
Author: L<KWATCH|https://metacpan.org/author/KWATCH>
A reinvention of Perl testing modules (it even comes with an equivalent for 'prove' command), with probably no added features and some added quirks. (Nested) topic can already be done using Test::More's subtests. Filtering and setup/teardown can be d...
<br>
Rating: 4/10
=item L<HTML::Escape>
Author: L<TOKUHIROM|https://metacpan.org/author/TOKUHIROM>
Still a bit slower than PHP's htmlspecialchars(), but in the same ballpark. An order of magnitude faster than HTML::Entities. Does not provide unescaping, but it's okay since escaping is the majority of use cases.
lib/Acme/CPANModules/Import/CPANRatings/User/stevenharyanto.pm view on Meta::CPAN
Casual benchmarking on my PC shows that Data::Clone is up to twice faster than this.
Rating: 6/10
=item L<Perl::Strip>
Author: L<MLEHMANN|https://metacpan.org/author/MLEHMANN>
Balancing previous unhelpful review. Slowish (can't complain, PPI-based) but works and comes with a command-line utility.
<br><br>Beware though that the command-line utility modifies file in place without backup, without warning, and without option to create backup.
<br>
Rating: 8/10
=item L<Perl::Squish>
Author: L<ADAMK|https://metacpan.org/author/ADAMK>
Have failed to build for 1.5 years (reported bug RT#66958 left untouched, users need to install Module::Install first). No usage documentation.
lib/Acme/CPANModules/Import/CPANRatings/User/stevenharyanto.pm view on Meta::CPAN
Like Carp::Always? Want something better? Here it is.
<br>
=item L<CHI>
Author: L<ASB|https://metacpan.org/author/ASB>
The DBI of caching. Stop reinventing your caching framework and just use this.
<br><br>UPDATE 2013-01-16: unfortunately, the use of Moose reduces the usefulness of CHI for command-line scripts (0.2s/146 files/53k lines startup overhead just to initialize a File cache). So 4 stars instead of 5. Let's hope the author migrates to ...
<br>
Rating: 8/10
=item L<Monkey::Patch>
Author: L<FRODWITH|https://metacpan.org/author/FRODWITH>
Compared to several other monkey-patching modules (like Sub::Monkey or Class::Monkey) I prefer this one because the interface is simplest and the documentation is the most straightforward. Plus it can do stacked patching and unordered restore, which ...
lib/Acme/CPANModules/Import/CPANRatings/User/stevenharyanto.pm view on Meta::CPAN
=item L<PerlX::Perform>
Author: L<TOBYINK|https://metacpan.org/author/TOBYINK>
I personally don't see much value of this syntactic sugar since Perl already allows us to express clearly. Pick one:
<br><br>for ($foo) { say $_ if defined }
<br><br>for (grep {defined} $foo) { say $_ }
<br><br>do { say $_ if defined } for $foo
<br><br>say $_ for grep {defined} $foo
<br><br>And save yourself from having to remember whether we should add a comma or not before "wherever".
<br>
=item L<TOBYINK::PerlX::A>
I have nothing against bundles like this, but beware that adding 'use TOBYINK::PerlX::A' will cause Perl to load 460 files and compile +- 160k lines (takes 1s on my Core i5 machine and 8s on my Atom netbook).
=item L<WWW::Google::Images>
lib/Acme/CPANModules/Import/CPANRatings/User/stevenharyanto.pm view on Meta::CPAN
Rating: 2/10
=item L<Passwd::Unix>
Author: L<STRZELEC|https://metacpan.org/author/STRZELEC>
No tests. No detailed error status, only true/false (yes, there is a 'warnings' parameter on constructor, but this doesn't give out warnings on all operations, only some). No locking (although there is backup, but still).
<br><br>Also, some weird choices, why use bzip2 when creating backup? Or, why still require running as root (checking $() if we are allowing custom database file location?
<br><br>Between this and Unix::ConfigFile, I'm seriously considering using Unix commands instead (useradd, userdel, gpasswd, et al).
<br><br>UPDATE 2011-04-21: I created a fork of Passwd::Unix 0.52 called Passwd::Unix::Alt instead, which add some tests and modifications. Try it out if your needs are also not met by Passwd::Unix.
<br><br>UPDATE 2012-08-30: I created a new module called Unix::Passwd::File. Try it out if your needs are also not met by Passwd::Unix.
Rating: 2/10
=item L<Unix::ConfigFile>
Author: L<SSNODGRA|https://metacpan.org/author/SSNODGRA>
lib/Acme/CPANModules/Import/CPANRatings/User/stevenharyanto.pm view on Meta::CPAN
Author: L<ORCLEV|https://metacpan.org/author/ORCLEV>
I mass download stuffs by putting a bunch of torrent files in a directory on the server and let rtorrent takes care of them. With this module I can quickly whip up a short script to calculate the total size of the downloadable files so I can be prett...
<br>
=item L<Module::CoreList>
Author: L<BINGOS|https://metacpan.org/author/BINGOS>
Wow, I was thinking the same exact "godsend" too and turns out some other reviewer already said so. Very very helpful to assist deployment and pick modules to use. I personally made a couple of command-line scripts like pm-in-core or core-s...
<br>
=item L<WWW::Mechanize>
Author: L<SIMBABQUE|https://metacpan.org/author/SIMBABQUE>
WWW::Mechanize is of course one of the indispensable tools for any web programmer or admin. The current problem is the proliferation of 3rd party subclasses, the functionalities of which cannot be used together. So you want a polite Mechanize which d...
<br>
lib/Acme/CPANModules/Import/CPANRatings/User/stevenharyanto.pm view on Meta::CPAN
<br><br>The documentation does not show what Pond looks like.
<br><br>One cute thing about Pond is that you can check Pond syntax using a single regex. But apart from that, there's nothing compelling in using Pond to serialize data.
Rating: 4/10
=item L<File::Which>
Author: L<PLICEASE|https://metacpan.org/author/PLICEASE>
You can always count on CPAN to have prewritten modules for various things, including this one. I've never bothered before about portability and just rely on the "which" command, but for one reason there's a time when I just couldn't do tha...
<br><br>Btw, there's also File::Which::Cached.
=item L<String::ShellQuote>
Author: L<ROSCH|https://metacpan.org/author/ROSCH>
I admit it. Ever since I know about escapeshellarg() and escapeshellcmd() in PHP, I've been reimplementing this function in Perl literally a million of times (mostly because of laziness and because it only takes a couple of lines in Perl). Only a fe...
<br><br>The only problem for this module is lack of visibility. Before I've never read articles or blog posts mentioning this module, ever. Yes, we have system() that can bypass the shell, but qx() can't. So yes, this module needs to be marketed more...
<br>
lib/Acme/CPANModules/Import/CPANRatings/User/stevenharyanto.pm view on Meta::CPAN
or L<Acme::CM::Get>:
% perl -MAcme::CM::Get=Import::CPANRatings::User::stevenharyanto -E'say $_->{module} for @{ $LIST->{entries} }' | cpanm -n
or directly:
% perl -MAcme::CPANModules::Import::CPANRatings::User::stevenharyanto -E'say $_->{module} for @{ $Acme::CPANModules::Import::CPANRatings::User::stevenharyanto::LIST->{entries} }' | cpanm -n
This Acme::CPANModules module also helps L<lcpan> produce a more meaningful
result for C<lcpan related-mods> command when it comes to finding related
modules for the modules listed in this Acme::CPANModules module.
See L<App::lcpan::Cmd::related_mods> for more details on how "related modules"
are found.
=head1 HOMEPAGE
Please visit the project's homepage at L<https://metacpan.org/release/Acme-CPANModules-Import-CPANRatings-User-stevenharyanto>.
=head1 SOURCE
t/00-compile.t view on Meta::CPAN
use File::Spec;
use IPC::Open3;
use IO::Handle;
open my $stdin, '<', File::Spec->devnull or die "can't open devnull: $!";
my @warnings;
for my $lib (@module_files)
{
# see L<perlfaq8/How can I capture STDERR from an external command?>
my $stderr = IO::Handle->new;
diag('Running: ', join(', ', map { my $str = $_; $str =~ s/'/\\'/g; q{'} . $str . q{'} }
$^X, @switches, '-e', "require q[$lib]"))
if $ENV{PERL_COMPILE_TEST_DEBUG};
my $pid = open3($stdin, '>&STDERR', $stderr, $^X, @switches, '-e', "require q[$lib]");
binmode $stderr, ':crlf' if $^O eq 'MSWin32';
my @_warnings = <$stderr>;
waitpid($pid, 0);