(Moved from reddit.com/r/perl now that blogs.perl.org seems to be behaving itself).
Over the past year or so I've had to deal with PPI for parsing and rewriting perl code a handful of times. Refactoring scripts are generally one-shot single purpose. Like any data mangling activity refactoring scripts can get messy because they're generally disposable, so architecture tends to be an afterthought at best. You can kind of tell this if you go and read Perl::Critic policies. They're plagued by boilerplate and repetitive code, and that's for code that is extensively reused. The problem multiplies in the case where you're writing throwaway code against PPI. In this post I'm going to show off PPIx::Refactor, which is a minimal interface to contain a small but annoying part of the mess.
I have started to create a list of programming exercises. Mostly extracted from my Perl beginner course. Some of them already have "Tools" that help solve the exercise. Some of them even have links to a solution in Perl 5.
My plan is to add many more exercises and to provides "Tools" and "Solutions" in Perl 6 and other programming languages as well. (Currently Ruby, Python and JavaScript are on the short list.)
If you have ideas for exercises I'd be happy to hear about them.
Do you use Dancer? Even if you don't, want to help one of the most awesome projects in the Perl community grow and reach a wider audience? You can, and you can get a copy of the book we're writing for helping us out.
Help the Dancer devs bring Dancer to a larger community, and help us get this book done. It will be a great resource for new and experienced developers alike.
I'm pleased to be sponsoring again this year as http://perl.careers/, but a reminder that the deadline for talks is end of this week, Friday the 6th of November!
If you'll just be attending but not speaking, by signing up early you'll make sure there's enough coffee and beer for you...
After this was written I received feedback from several respected members of the community alerting me to the problems that could be caused by is() *guessing* if it should be comparing numbers or strings. After hearing this feedback I agreed that the behavior constituted a bug, and one serious enough to alter the behavior post release. Test::Stream was marked *stable* recently enough that the change should not impact very many people, if in fact any.
The latest version of Test::Stream on CPAN no longer guesses if it is given a number vs a string.
In the very near future cmp_ok, and a 'Classic' bundle which provides just the functionality of Test::More, including classic 'is' and 'is_deeply' will be released, and will be the recommended bundle for people moving from Test::More. Branches and pull requests for both of these have been written, I am giving them some time for review before proceeding with their release.
[This is a post in a new, probably long-ass, series. You may want to begin at the beginning. I do not promise that the next post in the series will be next week. Just that I will eventually finish it, someday. Unless I get hit by a bus.]
Last time I went into more details about how I might go about creating a new date module, and what I would expect it to achieve. This time we clear out some housekeeping and try to nail down a design strategy.
The is_success() method which HTTP::Response provides is not necessarily a full indicator of success. This has bitten me before, so I thought it was worth writing about. Perhaps it may save you some heartache down the line.
Test-Stream, the intended successor of Test-Simple (Test::Builder, Test::More), is moving out of the experimental phase. The experimental notice has been removed from all but a couple modules in the distribution. Now is a good time to start writing new testing tools using Test-Streams capabilities.
What does this mean for Test::More, Test::Builder or my existing test tools?
At the moment it means very little. Test::Builder is still around, and not going anywhere any time soon. At the moment Test::Builder based tools and Test::Stream based tools will not work together in a single test script, though they can both be used in different files in a single test suite.
Task::Dancer2 0.04 and Dancer2::Plugin::Queue 0.005 are on their way to CPAN. D22::P::Queue had test failures preventing it from installing. Task::Dancer2 re-enabled Queue in the bundle, and also the REST plugin.
The web is slow. Between overloaded pages, overloaded servers, bloated browsers, and ISP throttling, it's not unusual for even simple pages to take a couple seconds to load. But you get used to it, so I was struck by how fast the Internet can actually be when I fired up a gopher client recently.
Yes, gopher still exists, barely. For those who are unfamiliar with it, gopher is a sort of text-based hypertext system that predates the web -- think the web minus graphics, fonts, and interactive scripting, just files and directories and links between them, though you can also offer a few other things like search services. I miss those specialized services like gopher, IRC, and Usenet, that did one thing very well before they were overwhelmed by the web.
Thank you to those who attended and sponsored the Perl Dancer Conference 2015 in Vienna this week! Looking forward to seeing you next year (sorry I had to miss this one).
Most importantly, thank you to the Dancer Core Team for extending an invite to me. I am proud to be one of you :)