4 ms·
I wrote a blog post which entirely disagrees with you that got around 11000 hits to date (many from here on HN).[1] It is true that one way to do something is
by einhverfr 13y ago
I wrote a blog post which entirely disagrees with you that got around 11000 hits to date (many from here on HN).[1]
It is true that one way to do something is foreign to Perl culture. It is also true that the best Perl code is pretty unreadable if you expect to read it as a C/C++/Java programmer. Perl is a very different language, and good Perl code reads very differently.
I am not going to get in a language war of Perl vs Java. Both languages have their places. I prefer Perl on the server. I prefer Java on clients I have no control over because at least I can hope it has a working JVM.
Readable Perl code is just different from Java. Let's take an example:
package Foo;
use Moose;
use PGObject::Util::DBMethod;
with 'PGObject::Simple::Role', 'Baz';
has id => (is => 'ro', isa => 'Int');
has name => (is => 'ro', isa => 'Str');
has description => (is => 'ro', isa => 'Str');
dbmethod int => (funcname => 'foo_to_int');
dbmethod get => (funcname => 'get_foo');
dbmethod save => (funcname => 'save_foo');
There is nothing unreadable about that. It provides a package with declarative specifications for properties and accessors (all of which are read only) and methods which delegate to PostgreSQL stored procedures (more information of which is probably further clarified in the Baz interface.
There is nothing inherently unreadable about Perl.
[1]http://ledgersmbdev.blogspot.com/2014/02/in-praise-of-perl-5.html http://ledgersmbdev.blogspot.com/2014/02/in-praise-of-perl-5...
- RyanZAG 13y agoThanks for the reply - I haven't touched Perl in years and it's definitely much more readable now. It looks like a lot of work has gone into making Perl more readable, especially Moose. The perl code I've seen in the wild generally doesn't look like that though. Is that more an issue of the age of most Perl code? Or are some people still writing 'old fashioned perl' even if it isn't the recommended way anymore?
- BugBrother 13y agoThere was a testing revolution over a decade ago. Then came Moose (2007ish?). You have syntax extensions now. And so on. See e.g. http://search.cpan.org/~mauke/Keyword-Simple-0.02/lib/Keyword/Simple.pm http://search.cpan.org/~mauke/Keyword-Simple-0.02/lib/Keywor... http://search.cpan.org/~mauke/Function-Parameters-1.0401/lib/Function/Parameters.pm http://search.cpan.org/~mauke/Function-Parameters-1.0401/lib... What seems to happen the coming years in Perl 5 (unless the Python language trolls manages to discredit it enough to kill it :-) ) is probably gelling around language [syntax] extensions and Moose going to the Perl core. But it will still keep backwards compatibility. (And I write horrible Perl code most days myself, as one line liners. :-) Best damn shell functionality on this planet imho, along with Emacs command line editing.)
- einhverfr 13y agoPart of the problem is that one-off scripts are different than applications. One off scripts don't need to be big or particularly maintainable, but the problem is people get in the habit of writing Perl that way. So it's complicated. Also keep in mind that a lot of CPAN modules out there began back in the 1990's and are still being developed today. I know. I am now a maintainer of several, and the code isn't often that pretty. But this is the benefit of being encouraged to think about elegance of code: one improves. But one can write amazingly beautiful, clear, and elegant Perl or one can write rubbish (after all good Perl doesn't take much work to maintain). Most of my work is either maintaining rubbish or (I hope) writing nice, maintainable code.
- einhverfr 13y agoJust to clarify, re-reading this it looks a little confused. The rubbish I maintain is not stuff on CPAN but legacy code inherited from another non-CPAN project. The legacy modules are sometimes annoying in some ways but they are serviceable. Some of the non-CPAN code I have (the rubbish) is sufficiently unmaintainable that the only way of dealing with it is to refactor with a chain saw and avoid touching it otherwise.