view release on metacpan or search on metacpan
This list is generated by scraping CPANRatings (cpanratings.perl.org)
user page.
ACME::CPANMODULES ENTRIES
LWP::JSON::Tiny
Author: SKINGTON <https://metacpan.org/author/SKINGTON>
I'm not sure this really "befits a ::Tiny distribution"
just because it's a thin wrapper of something. Please read: <a
href="http://blogs.perl.org/users/dan_muey/2014/08/please-dont-use-t
iny-unless-it-meets-the-tiny-criteria-thanks.html"
rel="nofollow">blogs.perl.org/users/dan_muey/2014/08...</a> or the
Tiny mandate e.g. in <a
href="https://metacpan.org/pod/Time::Tiny#The-Tiny-Mandate"
rel="nofollow">metacpan.org/pod/Time::Tiny#The-Tiny-...</a>
Acme::CPANRatings
Author: PERLANCAR <https://metacpan.org/author/PERLANCAR>
After the last template change of the website which is one year ago,
"Was this review helpful" links no longer works. <a
href="https://github.com/perlorg/perlweb/issues/232"
Author: JJSCHUTZ <https://metacpan.org/author/JJSCHUTZ>
Interesting features, but mooseware.
Rating: 6/10
Algorithm::Dependency
Author: ETHER <https://metacpan.org/author/ETHER>
Happily returns result when graph is cyclic (and thus proper
topological sorting cannot be done). See also Data::Graph::Util for
a simpler alternative. <br>
Rating: 6/10
Data::Match
Author: KSTEPHENS <https://metacpan.org/author/KSTEPHENS>
(Reviewing Sort::Topological, which is included in Data-Match
distribution at the time of this review). <br><br>Hangs when given a
dependency like: a => ["a"]. Happily returns result
when graph is cyclic (and thus proper topological sorting cannot be
done). See also Data::Graph::Util for alternative. <br>
Rating: 4/10
File::Find::Wanted
Author: PETDANCE <https://metacpan.org/author/PETDANCE>
File::Find lacks the "making easy things easy" part, so
modules like this are great. A further step would be an option to
omit $wanted for even simpler cases, but that would probably break
Author: KNORR <https://metacpan.org/author/KNORR>
The "checksum" (basically just adding 16-bit words) is too
simplistic to be a real checksum or to be practically useful. Even
MD5 or CRC32 is infinitely better. <br>
WordPress::XMLRPC
Author: IGIBBS <https://metacpan.org/author/IGIBBS>
Still works, partially, but in general out of date. For example, to
get post the deprecated metaWeblog.getPost API method is still used
instead of the newer wp.getPost call (which understandably is only
introduced in WordPress 3.4, while this module is last updated with
WordPress 2.8.4). And apparently wordpress.com doesn't return
post_content anymore when you use metaWeblog.getPost.
<br><br>Luckily, performing XMLRPC request directly is easy enough.
Just use XMLRPC::Lite and peruse the Wordpress documentation here:
<a href="https://codex.wordpress.org/XML-RPC_WordPress_API"
rel="nofollow">codex.wordpress.org/XML-RPC_WordPress...</a>
Text::Levenshtein::Flexible
Author: MBETHKE <https://metacpan.org/author/MBETHKE>
My new favorite Levenshtein distance module. It's as fast (if not
faster) than Text::Levenshtein::XS and can provide a speed boost if
created HTTP::Tinyish.
File::Util
Author: TOMMY <https://metacpan.org/author/TOMMY>
Point for documentation (lots of examples and cookbook). But the
recipes in the cookbook currently don't really entice me to use the
module. Let's see: <br><br>1) batch file rename: it's much simpler
to use 'rename' or 'perlmv' utility. Or, it's much shorter to just
use plain perl like 'for (grep {-f} <*>) { rename $*,
s/.log$/.txt/r }'. <br><br>2) recursively remove a directory tree:
it's much shorter to just use 'File::Path::remove*tree()'.
<br><br>3) increment a counter file: no locking (it's classic 1990's
counter.cgi race condition all over again). Take a look at, for
example, The Perl Cookbook chapter 7.11. Or I think one of Randal
Schwartz's articles. <br><br>As an alternative, one can also take a
look at Path::Tiny.
Common::Routine
Author: PEKINGSAM <https://metacpan.org/author/PEKINGSAM>
Carp::Always
Author: FERREIRA <https://metacpan.org/author/FERREIRA>
This module works well for string exceptions (e.g. die "some
message"), but for ref/object exceptions (e.g. die
[404,"Not found"] or die $some_object) it will simply
print/return the ref/object and thus no stack trace information is
produced. <br><br>See also Devel::Confess, which can handle
ref/object. <br><br>References: <br> <a
href="http://blogs.perl.org/users/graham_knop/2013/09/carp-always-ev
enobjects.html"
rel="nofollow">blogs.perl.org/users/graham_knop/2013...</a>
experimental
Author: LEONT <https://metacpan.org/author/LEONT>
Our prayer has been answered. experimental was added to perl core in
5.19.11
Exporter::Lite
Author: NEILB <https://metacpan.org/author/NEILB>
almost everywhere. Thanks for this. <br><br>Also, this might not be
immediately obvious since there's no mention on the See Also
section: to go the other way (converting English noun from singular
to plural) you can use Lingua::EN::Inflect.
Log::Declare
Author: CHGOVUK <https://metacpan.org/author/CHGOVUK>
I haven't used or evaluated this module in detail, but if there is
one advantage to using procedural/command syntax: <br><br>info blah;
<br><br>as opposed to object syntax: <br><br>$log->info(blah);
<br><br>then this module clearly demonstrates it. Using
Devel::Declare (or the Perl 5.14+ keyword API), the former can be
easily rewritten as something like: <br><br>info && blah;
<br><br>or: <br><br>if (CONST_LOG_INFO) { info blah } <br><br>and
during compilation, Perl can optimize the line away and we get zero
run-time penalty when logging (level) is disabled.
<br><br>(Actually, it's also possible for the object syntax to get
rewritten, e.g. using source filter, but it's more cumbersome).
Benchmark::Timer
Author: DCOPPIT <https://metacpan.org/author/DCOPPIT>
Nice alternative module for benchmarking with a different interface
than Benchmark (marking portion of code to be benchmarked with start
and stop). <br><br>For most Perl programmers familiar to the core
module Benchmark, I recommend looking at Benchmark::Dumb first
arguments and supplying default value. In which case you might as
well use Params::Validate directly as it's several times (e.g. 3-4x)
faster. <br><br>If you want to use the more featured xgetargs, there
is currently no compiled version. <br><br>All in all, I think users
should take a look at Params::Validate first.
Debug::Easy
Author: RKELSCH <https://metacpan.org/author/RKELSCH>
Not as easy as the name might claim. First of all, why do users need
to pass LINE explicitly for every call??? Other logging modules will
get this information automatically via caller(). <br><br>Levels are
a bit confusing: why is debug split to 2 (or 3)? <br><br>Not as
flexible as it should be because the design conflates some things
together. For example, most levels output to STDERR but some level
(VERBOSE) outputs to STDOUT instead. The output concern and levels
should've been separated. Another example would be the DEBUGWAIT
level, where level is DEBUG *and* execution is halted (wait on a
keypress) on log. What if users want a lower level setting *but*
want execution to be halted on log? The halt/keypress setting
should've been separated from the level.
Rating: 4/10
File::Slurper
Author: LEONT <https://metacpan.org/author/LEONT>
Who'da thought that something as seemingly simple as "slurping
a file into a string" would need several modules and false
starts? Well, if you add encodings, Perl I/O layers, scalar/list
Signal::StackTrace::CarpLike
Author: SARTAK <https://metacpan.org/author/SARTAK>
Nice, but Signal::StackTrace should've output something carp-like in
the first place.
Devel::Messenger
Author: KOLIBRIE <https://metacpan.org/author/KOLIBRIE>
I think this is basically logging under a fancy name and with a more
cumbersome interface. Look at Log::Any instead.
Term::Twiddle
Author: SCOTTW <https://metacpan.org/author/SCOTTW>
Cute! I didn't know SIGALRM still works even though you're doing
blocking I/O or calling other programs. But unfortunately it doesn't
work if you sleep(), making this approach not as attractive. <br>
CHI Author: ASB <https://metacpan.org/author/ASB>
devdata/perlancar view on Meta::CPAN
<div class="container-fluid">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="/">
<img src="//cdn.perl.org/perlweb/images/logo_cpanratings.svg" alt="Reviews by perlancar | Perl, modern programming" class="page-logo">
</a>
</div>
<div id="navbar" class="collapse navbar-collapse">
<ul class="list-inline text-center nav navbar-nav navbar-right">
<li class="sub">
<a href="/search">Search</a>
</li>
<li class="sub">
<a href="/about.html">About</a>
</li>
<li class="sub">
<a href="https://log.perl.org/2018/06/cpan-ratings-read-only.html">
<b>Read-Only</b>
</a>
</li>
</ul>
</div><!--/.nav-collapse -->
</div>
</nav>
devdata/perlancar view on Meta::CPAN
(<a href="https://metacpan.org/release/LWP-JSON-Tiny/">0.014</a>)
</h3>
<blockquote class="review_text">
I'm not sure this really "befits a ::Tiny distribution" just because it's a thin wrapper of something. Please read: <a href="http://blogs.perl.org/users/dan_muey/2014/08/please-dont-use-tiny-unless-it-meets-the-tiny-criteria-thanks.html" re...
</blockquote>
<div class="review_footer">
<p class="review_attribution">
<a href="/user/perlancar">perlancar</a> - 2018-05-15T07:36:16
(<a href="/dist/LWP-JSON-Tiny#13242">permalink</a>)
</p>
<div class="helpfulq">
devdata/perlancar view on Meta::CPAN
<img src="//cdn.perl.org/perlweb/cpanratings/images/stars-3.0.png" alt="***">
</h3>
<blockquote class="review_text">
Happily returns result when graph is cyclic (and thus proper topological sorting cannot be done). See also Data::Graph::Util for a simpler alternative.
<br>
</blockquote>
<div class="review_footer">
<p class="review_attribution">
<a href="/user/perlancar">perlancar</a> - 2017-04-03T04:25:43
(<a href="/dist/Algorithm-Dependency#13052">permalink</a>)
</p>
devdata/perlancar view on Meta::CPAN
<img src="//cdn.perl.org/perlweb/cpanratings/images/stars-2.0.png" alt="**">
</h3>
<blockquote class="review_text">
(Reviewing Sort::Topological, which is included in Data-Match distribution at the time of this review).
<br><br>Hangs when given a dependency like: a => ["a"]. Happily returns result when graph is cyclic (and thus proper topological sort...
</blockquote>
<div class="review_footer">
<p class="review_attribution">
<a href="/user/perlancar">perlancar</a> - 2017-04-03T04:23:55
(<a href="/dist/Data-Match#13050">permalink</a>)
</p>
devdata/perlancar view on Meta::CPAN
(<a href="https://metacpan.org/release/WordPress-XMLRPC/">1.23</a>)
</h3>
<blockquote class="review_text">
Still works, partially, but in general out of date. For example, to get post the deprecated metaWeblog.getPost API method is still used instead of the newer wp.getPost call (which understandably is only introduced in WordPress 3.4, while this module ...
</blockquote>
<div class="review_footer">
<p class="review_attribution">
<a href="/user/perlancar">perlancar</a> - 2016-11-04T17:07:47
(<a href="/dist/WordPress-XMLRPC#12904">permalink</a>)
</p>
<div class="helpfulq">
devdata/perlancar view on Meta::CPAN
(<a href="https://metacpan.org/release/File-Util/">4.161200</a>)
</h3>
<blockquote class="review_text">
Point for documentation (lots of examples and cookbook). But the recipes in the cookbook currently don't really entice me to use the module. Let's see:
<br><br>1) batch file rename: it's much simpler to use 'rename' or 'perlmv' utility. Or, it's much...
</blockquote>
<div class="review_footer">
<p class="review_attribution">
<a href="/user/perlancar">perlancar</a> - 2016-04-30T06:25:52
(<a href="/dist/File-Util#12782">permalink</a>)
</p>
<div class="helpfulq">
devdata/perlancar view on Meta::CPAN
(<a href="https://metacpan.org/release/Carp-Always/">0.13</a>)
</h3>
<blockquote class="review_text">
This module works well for string exceptions (e.g. die "some message"), but for ref/object exceptions (e.g. die [404,"Not found"] or die $some_object) it will simply print/return the ref/object and thus no stack trace information ...
<a href="http://blogs.perl.org/users/graham_knop/2013/09/carp-always-evenobjects.html" rel="nofollow">blogs.perl.org/users/graham_knop/2013...</a>
</blockquote>
<div class="review_footer">
<p class="review_attribution">
<a href="/user/perlancar">perlancar</a> - 2015-06-18T21:30:23
(<a href="/dist/Carp-Always#12196">permalink</a>)
</p>
<div class="helpfulq">
devdata/perlancar view on Meta::CPAN
(<a href="https://metacpan.org/release/Log-Declare/">0.10</a>)
</h3>
<blockquote class="review_text">
I haven't used or evaluated this module in detail, but if there is one advantage to using procedural/command syntax:
<br><br>info blah;
<br><br>as opposed to object syntax:
<br><br>$log->info(blah);
<br><br>then this module clearly demonstrates it...
</blockquote>
<div class="review_footer">
<p class="review_attribution">
<a href="/user/perlancar">perlancar</a> - 2015-03-24T04:17:14
(<a href="/dist/Log-Declare#12110">permalink</a>)
</p>
<div class="helpfulq">
devdata/perlancar view on Meta::CPAN
<img src="//cdn.perl.org/perlweb/cpanratings/images/stars-2.0.png" alt="**">
</h3>
<blockquote class="review_text">
Not as easy as the name might claim. First of all, why do users need to pass __LINE__ explicitly for every call??? Other logging modules will get this information automatically via caller().
<br><br>Levels are a bit confusing: why is debug split to ...
</blockquote>
<div class="review_footer">
<p class="review_attribution">
<a href="/user/perlancar">perlancar</a> - 2015-03-22T23:15:12
(<a href="/dist/Debug-Easy#12104">permalink</a>)
</p>
<div class="helpfulq">
devdata/perlancar view on Meta::CPAN
(<a href="https://metacpan.org/release/Devel-Messenger/">0.02</a>)
</h3>
<blockquote class="review_text">
I think this is basically logging under a fancy name and with a more cumbersome interface. Look at Log::Any instead.
</blockquote>
<div class="review_footer">
<p class="review_attribution">
<a href="/user/perlancar">perlancar</a> - 2014-10-11T18:34:35
(<a href="/dist/Devel-Messenger#11963">permalink</a>)
</p>
<div class="helpfulq">
devdata/perlancar view on Meta::CPAN
<div class="container-fluid space-top-xl">
<footer class="row">
<div class="footer">
<ul class="col-xs-12 col-sm-2 list-unstyled">
<li><h4>Perl.org</h4></li>
<li><a href="http://www.perl.org/">www</a></li>
<li><a href="http://blogs.perl.org/">blogs</a></li>
<li><a href="http://jobs.perl.org/">jobs</a></li>
<li><a href="http://learn.perl.org/">learn</a></li>
<li><a href="http://dev.perl.org/">dev</a></li>
</ul>
<ul class="col-xs-12 col-sm-2 list-unstyled">
<li><h4>Connect</h4></li>
<li><a href="/siteinfo.html">Site Info</a></li>
<!--li><a href="#" class="links">Facebook</a></li>
<li><a href="#" class="links">Twitter</a></li-->
</ul>
devscript/update view on Meta::CPAN
{
users => ['perlancar'],
user_agent => 'Mozilla/5.0',
dist_dir => "$Bin/..",
},
'app',
);
Perinci::CmdLine::Any->new(
url => '/main/app',
log => 1,
)->run;
lib/Acme/CPANModules/Import/CPANRatings/User/perlancar.pm view on Meta::CPAN
package Acme::CPANModules::Import::CPANRatings::User::perlancar;
use strict;
our $AUTHORITY = 'cpan:PERLANCAR'; # AUTHORITY
our $DATE = '2023-10-29'; # DATE
our $DIST = 'Acme-CPANModules-Import-CPANRatings-User-perlancar'; # DIST
our $VERSION = '0.002'; # VERSION
our $LIST = {description=>"This list is generated by scraping CPANRatings (cpanratings.perl.org) user page.",entries=>[{description=>"\nI'm not sure this really "befits a ::Tiny distribution" just because it's a thin wrapper of something. P...
1;
# ABSTRACT: List of modules mentioned by CPANRatings user perlancar
__END__
=pod
=encoding UTF-8
lib/Acme/CPANModules/Import/CPANRatings/User/perlancar.pm view on Meta::CPAN
This list is generated by scraping CPANRatings (cpanratings.perl.org) user page.
=head1 ACME::CPANMODULES ENTRIES
=over
=item L<LWP::JSON::Tiny>
Author: L<SKINGTON|https://metacpan.org/author/SKINGTON>
I'm not sure this really "befits a ::Tiny distribution" just because it's a thin wrapper of something. Please read: <a href="http://blogs.perl.org/users/dan_muey/2014/08/please-dont-use-tiny-unless-it-meets-the-tiny-criteria-thanks.html" re...
=item L<Acme::CPANRatings>
Author: L<PERLANCAR|https://metacpan.org/author/PERLANCAR>
After the last template change of the website which is one year ago, "Was this review helpful" links no longer works. <a href="https://github.com/perlorg/perlweb/issues/232" rel="nofollow">github.com/perlorg/perlweb/issues/232</a>
<br>
lib/Acme/CPANModules/Import/CPANRatings/User/perlancar.pm view on Meta::CPAN
Interesting features, but mooseware.
Rating: 6/10
=item L<Algorithm::Dependency>
Author: L<ETHER|https://metacpan.org/author/ETHER>
Happily returns result when graph is cyclic (and thus proper topological sorting cannot be done). See also Data::Graph::Util for a simpler alternative.
<br>
Rating: 6/10
=item L<Data::Match>
Author: L<KSTEPHENS|https://metacpan.org/author/KSTEPHENS>
(Reviewing Sort::Topological, which is included in Data-Match distribution at the time of this review).
<br><br>Hangs when given a dependency like: a => ["a"]. Happily returns result when graph is cyclic (and thus proper topological sorting cannot be done). See also Data::Graph::Util for alternative.
<br>
Rating: 4/10
=item L<File::Find::Wanted>
Author: L<PETDANCE|https://metacpan.org/author/PETDANCE>
File::Find lacks the "making easy things easy" part, so modules like this are great. A further step would be an option to omit $wanted for even simpler cases, but that would probably break the interface. Another alternative is File::Finder,...
lib/Acme/CPANModules/Import/CPANRatings/User/perlancar.pm view on Meta::CPAN
Author: L<KNORR|https://metacpan.org/author/KNORR>
The "checksum" (basically just adding 16-bit words) is too simplistic to be a real checksum or to be practically useful. Even MD5 or CRC32 is infinitely better.
<br>
=item L<WordPress::XMLRPC>
Author: L<IGIBBS|https://metacpan.org/author/IGIBBS>
Still works, partially, but in general out of date. For example, to get post the deprecated metaWeblog.getPost API method is still used instead of the newer wp.getPost call (which understandably is only introduced in WordPress 3.4, while this module ...
<br><br>Luckily, performing XMLRPC request directly is easy enough. Just use XMLRPC::Lite and peruse the Wordpress documentation here: <a href="https://codex.wordpress.org/XML-RPC_WordPress_API" rel="nofollow">codex.wordpress.org/XML-RPC_WordPress......
=item L<Text::Levenshtein::Flexible>
Author: L<MBETHKE|https://metacpan.org/author/MBETHKE>
My new favorite Levenshtein distance module. It's as fast (if not faster) than Text::Levenshtein::XS and can provide a speed boost if you don't care about distances above a certain limit. Which I think in many cases is true.
lib/Acme/CPANModules/Import/CPANRatings/User/perlancar.pm view on Meta::CPAN
Author: L<PINE|https://metacpan.org/author/PINE>
There are a few use-cases where this would be useful (mostly, to access https websites in the absence of required perl library like LWP::Protocol::https), but it would be more useful to provide an API that is already familiar to Perl programmers. Tha...
=item L<File::Util>
Author: L<TOMMY|https://metacpan.org/author/TOMMY>
Point for documentation (lots of examples and cookbook). But the recipes in the cookbook currently don't really entice me to use the module. Let's see:
<br><br>1) batch file rename: it's much simpler to use 'rename' or 'perlmv' utility. Or, it's much shorter to just use plain perl like 'for (grep {-f} <*>) { rename $I<< , s/.log$/.txt/r }'.
<br><br>2) recursively remove a directory tree: it's much shorter to just use 'File::Path::remove >>tree()'.
<br><br>3) increment a counter file: no locking (it's classic 1990's counter.cgi race condition all over again). Take a look at, for example, The Perl Cookbook chapter 7.11. Or I think one of Randal Schwartz's articles.
<br><br>As an alternative, one can also take a look at Path::Tiny.
=item L<Common::Routine>
Author: L<PEKINGSAM|https://metacpan.org/author/PEKINGSAM>
A couple of comments:
lib/Acme/CPANModules/Import/CPANRatings/User/perlancar.pm view on Meta::CPAN
=item L<Carp::Always>
Author: L<FERREIRA|https://metacpan.org/author/FERREIRA>
This module works well for string exceptions (e.g. die "some message"), but for ref/object exceptions (e.g. die [404,"Not found"] or die $some_object) it will simply print/return the ref/object and thus no stack trace information ...
<br><br>See also Devel::Confess, which can handle ref/object.
<br><br>References:
<br>
<a href="http://blogs.perl.org/users/graham_knop/2013/09/carp-always-evenobjects.html" rel="nofollow">blogs.perl.org/users/graham_knop/2013...</a>
=item L<experimental>
Author: L<LEONT|https://metacpan.org/author/LEONT>
Our prayer has been answered. experimental was added to perl core in 5.19.11
=item L<Exporter::Lite>
lib/Acme/CPANModules/Import/CPANRatings/User/perlancar.pm view on Meta::CPAN
<br><br>Also, this might not be immediately obvious since there's no mention on the See Also section: to go the other way (converting English noun from singular to plural) you can use Lingua::EN::Inflect.
=item L<Log::Declare>
Author: L<CHGOVUK|https://metacpan.org/author/CHGOVUK>
I haven't used or evaluated this module in detail, but if there is one advantage to using procedural/command syntax:
<br><br>info blah;
<br><br>as opposed to object syntax:
<br><br>$log->info(blah);
<br><br>then this module clearly demonstrates it. Using Devel::Declare (or the Perl 5.14+ keyword API), the former can be easily rewritten as something like:
<br><br>info && blah;
<br><br>or:
<br><br>if (CONST_LOG_INFO) { info blah }
<br><br>and during compilation, Perl can optimize the line away and we get zero run-time penalty when logging (level) is disabled.
<br><br>(Actually, it's also possible for the object syntax to get rewritten, e.g. using source filter, but it's more cumbersome).
=item L<Benchmark::Timer>
Author: L<DCOPPIT|https://metacpan.org/author/DCOPPIT>
Nice alternative module for benchmarking with a different interface than Benchmark (marking portion of code to be benchmarked with start and stop).
<br><br>For most Perl programmers familiar to the core module Benchmark, I recommend looking at Benchmark::Dumb first though. It has an interface like Benchmark (cmpthese() et all) but with some statistical confidence.
lib/Acme/CPANModules/Import/CPANRatings/User/perlancar.pm view on Meta::CPAN
Nice idea, but some performance concerns. If you want to use cgetargs (the compiled, faster version), you are restricted to the getargs() interface, which only features checking for required arguments and supplying default value. In which case you mi...
<br><br>If you want to use the more featured xgetargs, there is currently no compiled version.
<br><br>All in all, I think users should take a look at Params::Validate first.
=item L<Debug::Easy>
Author: L<RKELSCH|https://metacpan.org/author/RKELSCH>
Not as easy as the name might claim. First of all, why do users need to pass B<LINE> explicitly for every call??? Other logging modules will get this information automatically via caller().
<br><br>Levels are a bit confusing: why is debug split to 2 (or 3)?
<br><br>Not as flexible as it should be because the design conflates some things together. For example, most levels output to STDERR but some level (VERBOSE) outputs to STDOUT instead. The output concern and levels should've been separated. Another e...
Rating: 4/10
=item L<File::Slurper>
Author: L<LEONT|https://metacpan.org/author/LEONT>
Who'da thought that something as seemingly simple as "slurping a file into a string" would need several modules and false starts? Well, if you add encodings, Perl I/O layers, scalar/list context, DWIM-ness, ... it can get complex and buggy....
lib/Acme/CPANModules/Import/CPANRatings/User/perlancar.pm view on Meta::CPAN
Author: L<SARTAK|https://metacpan.org/author/SARTAK>
Nice, but Signal::StackTrace should've output something carp-like in the first place.
=item L<Devel::Messenger>
Author: L<KOLIBRIE|https://metacpan.org/author/KOLIBRIE>
I think this is basically logging under a fancy name and with a more cumbersome interface. Look at Log::Any instead.
=item L<Term::Twiddle>
Author: L<SCOTTW|https://metacpan.org/author/SCOTTW>
Cute! I didn't know SIGALRM still works even though you're doing blocking I/O or calling other programs. But unfortunately it doesn't work if you sleep(), making this approach not as attractive.
<br>