Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
Questions asking us to recommend or find a tool, library or favorite off-site resource are off-topic for Stack Overflow as they tend to attract opinionated answers and spam. Instead, describe the problem and what has been done so far to solve it.
Closed 9 years ago.
Improve this question
I am a bioinformatics student and am in the process of learning perl. I don't have a strong programming background but would like for that to change.
Right now I am in the process of reading/following and coding from this book
I want to know is this the best way to go about learning perl? Should I be experimenting with regular expressions more? Should I keep trying writing sample perl scripts?
Related: what are good books for learning perl
The definitive learning Perl book is aptly called "Learning Perl". Get it.
I cannot recommend writing sample scripts. Try to write something that you need. It doesn't have to be a big endeavor; everyone needs a little tool now and then. Writing sample scripts is boring; always was, always will be.
This seems like a potential duplicate as here are some related questions:
What are the best resources to starting learning Perl?
What’s the best online source to learn Perl?
Like most other answers on this post I can't disagree with the choice of "Learning Perl" as your first Perl text. Keep a copy of the perldoc documentation available for quick reference(I prefer using the html/pdf format which is available as a download from the main page).
In order to keep things from getting boring, especially in the initial stages I started converting my shell scripts to Perl, hacking away at it until I had three or more different versions of the same program with decreasing file size(not great for maintenance though). But then you know what they say - TMTOWTDI. Now I don't bother with shell scripts any more, writing it in Perl results in smaller turnaround times and the code can be easily reused and enhanced.
Once you are familiar with the more advanced concepts and are approaching a level of comfortability with using it for your day-to-day work or just simple one-liners you might want to have a look at Mark Jason Dominus' Higher-Order Perl which, according to me, takes the language and the reader's understanding of it to an entirely new level. The chapter on "Recursion and Callbacks" was a real eye-opener and changed my style completely from that of writing C-programs in Perl to actually writing "Perl" programs in Perl.
I use the online book "Learning Perl the Hard Way" to teach my coworkers about Perl.
Don't be intimidated by the title, it's just that it's directed at programmers who are already fluent in another language and therefore it doesn't focus on the programming part, but mostly on the Perl part, so it may apply better to your case (or not).
You really can't go wrong with the Lama book
Learning Perl
There's quite a library of O'Reilly books on Perl. Programming Perl is also excellent and probably worth having to complement the Lama book - I have both on my shelves and although I haven't needed to code in Perl for quite some time I found these books together a solid enough combination. The Perl Cookbook came in useful too (yes, this is one of those areas that O'Reilly has pretty much sew up :-).
As to practical exercises, Perl does have something of a reputation as a 'Write Only' language, so look for clear examples and if you are confused by anything don't necessarily assume that the problem is you - there's always more than one way to do it.
You also might want to look for examples of good code to study.
My experience is that there's nothing better for learning than doing. But you need someone to provide feedback, especially when you hit roadblocks that you can't get past. Stackoverflow is good for that, but, IME, Perlmonks is better in that there is a chatterbox for immediate feedback, as well as their question-and-answer posts for longer questions, combined with a more specialised environment. (And Larry Wall has been rumoured to hang out there, too, as well as a number of the authors of the above-referred-to books.)
Learn by doing. Get the books mentioned by others, but the real way to learn is to start a simple project. Mine was a Gtk based SQL editor. If you run into problems ask questions here and on the Perl Beginners list.
The choice of book is can be vary from person to person. So, as bioinformatics student who use perl, don't get any book that called "(X Programming language) for bioinformatics". Usually this kind of book is either.
They only give very basic of that programming language. You gonna to miss all the power from that language.
Wasting its space on how to use API, which you can find information easily via google.
Related
Closed. This question is off-topic. It is not currently accepting answers.
Want to improve this question? Update the question so it's on-topic for Stack Overflow.
Closed 12 years ago.
Improve this question
I am doing my dissertation project on NP-Hard Problems: I am going to implement various algorithms for problems such as the partition, the subset sum, the knapsack, etc and then compare the results, the running time, etc. Also, I am going to see what happens with the algorithms when you modify the problem (how does the algorithm behave on the reduced problem, etc).
Now I picked this topic as my project because I am interested in theoretical computer science but I am also not sure if I want to go on as an academic/researcher or join a company/startup and this project has both a theoretical and a practical (actual coding) side.
My question is, which programming language should I use? Should I stick to what I feel more familiar with (Java and maybe Python), or should I go with the web languages (HTML, CSS, PHP, RoR, etc), having in mind that web development skills are on high demand nowadays?
EDIT: HTML and CSS would be obviously used just for the UI.
I want my project to be something that will impress in an interview (for either a job or a masters course) and I am not confident that "yet another project in Java" can do that. I understand that as long as the work on it is good and the result is satisfactory I should be ok but if, let's say, using Ruby can give me some points I am totally going with that. In the same time, I understand that deciding which language to use is part of the project so I am not willing to complicate things just to try and look cool.
Thanks in advance!
EDIT: In case this changes any of the answers, this is a undergrad. dissertation project, not a PhD one.
First of all this is a subjective question, not perfectly suitable for SO, but we forgive you :)
Contrary to popular opinion here (looking at the previous answers), if you're trying to solve NP-Hard problems, I would definitely not write the programs in C or C++. Mainly because dynamic programming methods tend to look like absolute dog poop when written in low-level languages. For example, here's someone's dynamic programming solution to the knapsack problem: http://www.joshuarobinson.net/docs/knapsack.html.
It's well-written and well-formed, but barely readable simply due to the sheer amount of malloc, memcpy, and free you need to do. Go with Java or Python, no question about it. You want people to actually read (and maybe even enjoy?) your dissertation, I would assume.
Don't write it in PHP or Ruby because those languages aren't particularly applicable to computer science theory. With that said, if you're applying for a web-dev job and you're trying to impress your future employees with a knapsack problem or dynamic programming NP-Hard solvers, it's like shooting a sparrow with a cannonball.
If your project's subject is impressive, no one will care what language it's in. Do it in the language you feel is appropriate for the task. Knowing how to make the appropriate language choice and defending that choice should be more impressive than "OMG I used RoR XSL ActionScript CSS!!!"
Also, how long do anticipate this project will take? If you go with a language that's flashy and trendy today, do you know it will still be cool and popular when this project wraps up? Just saying in another way, popularity is not the reason to choose the language for something like this.
if you can invest effort and time, then i recommend c/c++. it will be an impressive add-on skill.
My language of preference would be Python. You could use Django and, in my opinion, it would be very applicable to things that are being done in the industry (especially with startups). Plus, you can't beat Python when it comes to readability and speed of development.
I would have thought that Python would be doing too much clever stuff under the hood to really be able to measure relative performance accurately.
Wouldn't it be better to use a lower-level language like C? Employers would respect you more for that than using something because it's "cool".
The languages you know look fine to me. The old saw is that a CS PhD makes you unemployable anyway, so I wouldn't worry about it. :-)
The other ones you mentioned are mostly specialized web presentation languages. I'm not real sure how one even goes about implementing the knapsack problem using CSS...
Well, as much as this might look fine on the web page, it seems to me that Java would do a better job doing what you need.
PHP, HTML and CSS knowledge is good for job finding, but not applicable very much on the subject you picked.
Also, I noticed a bunch of answers, so I guess this is a question very much related to personal taste and opinion. Hm... You asked for it, anyways ;)
Since you're already familiar with Python, I'd recommend using it. You can use the popular scipy and numpy libraries for your project. You'll probably find something of use in them.
That would be the core, or backend part of your project. When this part is finished, you should think about polish and presentation. You don't want to have an impressive looking presentation with wrong calculations.
Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 7 years ago.
Improve this question
Hey, I'm a relative newbie to programming. I've picked up some very basic Java (File I/O, GUIs, inheritance) and would like to take a look at functional programming - in particular, I would like to learn Scheme. I'm having some trouble finding a Scheme implementation I can understand. Interpreters are weird; I'm not sure how to save my programs and create executables. I've downloaded PLT Scheme, but I would prefer using something less condescending, something similar to NetBeans. Is there a plugin or tool that will allow me to quickly and easily create and manage Scheme programs? All help is appreciated!
some nice links for you
http://mitpress.mit.edu/sicp/
http://www.htdp.org/
both are course books. The courses with video lectures are available on the MIT opencourseware site.
http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/index.htm
I wish I had learned Lisp when I was 16. (I started programming commercially at that age.) I didn't learn it until I was nearly 40. Where I was once blind, now I can see. (Well, I can see a few inches ahead of me anyway.)
I second the idea that someone else here posted about learning Emacs.
One good way to learn any language is to go solve problems on projecteuler.net.
Try the book The Little Schemer, it provides an unconventional but yet easy to follow tutorial on Scheme, and in particular teaches you how to "think" recursively, which is essential in order to understand Scheme (and other functional programming languages).
Get DrRacket (Runs on any platform)
Get a book used from Amazon "The Scheme Programming Language" Cost $3.00 book $4.00 shipping
When you open open DrRacket use language from the pull-down menu.
enter
scheme
on the top of the script window and start on the exercises!
.....that's what I am doing now
SICP (Structure and Interpretation of Computer Programs) is sure a great book, but it is not necessary a good introduction to Scheme programming. Though, after some understanding of Scheme, reading SICP is recommended.
Learning to use Emacs as an editor would be useful. As a Scheme implementation I would recommend something like CHICKENscheme. Its manual describes for example how to deploy programs.
An alternative is a Scheme development environment like JazzScheme.
A good book for learning Scheme would be The Scheme Programming Language.
I think the docs for plt-scheme is quite nice http://docs.plt-scheme.org/ is worth reading
and also: write code, write code, write code
Maybe this isn't the best answer but one of things I have found over the years is that a lot of new programmers get pulled in too many directions. If you are just starting out the best thing you can do (my opinion) is to learn one programming language really well. If possible I would try to make this the language you are working in, if you are not working in a programming job then I would try to pick a language with the best prospect of getting a job. Once you have mastered this one language then learning other languages will help enhance your already solid foundation and help make you an exceptional programmer.
Don't get me wrong, learning Scheme is a great thing to do but until you have mastered one language you will have a harder time moving up the ranks and landing that perfect job. In the end most companies are looking to hire the guru's, make sure you are in this group.
I took a programming languages course in college that was done entirely in Scheme, and the textbook we used is "Programming Languages: Application and Interpretation" by Shriram Krishnamurthi, one of the guys who helped write DrScheme. The textbook is available freely online. I found the book to be really helpful and informative when trying to understand the arcane mysticism of Scheme.
A nice beginner intro to Lisp is Common Lisp First Contact
Not a heavyweight course like SICP mentioned above, but a gentle introduction
to the syntax, features and oddities of Common Lisp in a nicely formatted PDF
optimized for screen reading.
Well I can't help You much with the tools. I tried MIT implementation and got a bit lost too, but I'd like to recommend a book which is a great source of knowledge about programming in general and uses scheme for illustrating ideas. If You din't come across this one yet, You have to check SICP
If Java environment is already comfortable for you, then probably the best way is to use Scheme implementations that run on top of JVM. For educational purposes SISC is more than enough:
http://sisc-scheme.org/
Alternatively, you could use Kawa or Bigloo.
If you're up to learning functional ways, and not necessarily bound to Scheme, then probably Clojure would be a right choice.
Closed. This question is off-topic. It is not currently accepting answers.
Want to improve this question? Update the question so it's on-topic for Stack Overflow.
Closed 10 years ago.
Improve this question
I'm particularly interested in Windows PowerShell, but here's a somewhat more general complaint:
When asking for help on learning something new, be it a small subject on PHP or understanding a class in Java, what usually happens is that people direct me towards the documentation pages.
What I'm looking for is somewhat of a course. A deep explanation of why something works the way it does.
I know my basic programming, like Java and C#. I've never seen C or C++, though I have seen a bit of assembler. I know what the Stack and Heap are, how boxing and unboxing works, why you have to deep-copy an array instead of copying the pointer and some other things.
Windows PowerShell on the other hand, I know nothing about. And I notice that when reading the small document or some code, I usually forget what it does or why it works.
What I am looking for is preferably, a nice tutorial that explains the beginnings, the concepts, and goes to more difficult things at a steady pace.
The only thing documentation can do is explain what a function does. That's no good to me since I don't know what I want to do yet. I could read about a thousand functions, and forget about most of them, because I don't need to implement them right after it. Randomly wandering through the documentation doesn't do me any good.
So conclude, what is a good tutorial on Windows Powershell? One which explains in clear language what is happening, one which builds on previous things learned.
I don't think googling this is a good idea. Doing a Google search on this would turn up numerous tutorials. And experience tells me that you have to look long and hard to find the gem you're looking for. That's why I'm asking here. Because this is the place where you can find more experienced people. Many of the PowerShell guys among you will know the good ones already, and by asking you, I avoid wasting time that could be spent learning. So to summarize: I will not google this!
I wrote a free eBook along these lines. I will let you be the judge of whether or not it is good but my goal was to provide folks with a good mental model for how PowerShell works. You can download it from here. It is about 60 pages or so. You can find a more comprehensive free ebook online called Master-PowerShell.
Of course, you can peruse StackOverflow for Q&A and also ask questions as you have them.
I like this one
http://arstechnica.com/business/news/2005/10/msh.ars/2
I wouldn't consider doing research on a programming language a failure, even if it takes you forever to find that "gem" you are looking for. Searching for awesome material is an art and the more you do it, the better you get at it. The community won't always be able (or willing) to answer all of your questions for you, especially if they know you haven't done your due diligence to look something up.
"What tutorial do you recommend for learning PowerShell?" might be an answer to your question.
I like to use the O'Reilly Pocket Reference versions of books to get started in a new subject. Easy to take with you on the plane, on a lunch break, or in the necessary (beats People magazine).
Here's the Windows PowerShell Pocket Reference at Amazon. $6.84 for a Used copy.
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
I got into Perl years ago and always found it a fun and expressive language to work with.
I found that programming in Perl makes me quite productive thanks to its low overhead and the outstanding amount of ready-made solutions to common problems on CPAN.
If you're new to Perl, what got you into it?
I was coding PHP for a living, and then heard of their change from :: to \ as a name-space separator. I'm really not joking or being spiteful, but that is really what got the ball rolling.
Not to be elitist, but I suddenly realised that the people I had to collaborate with whom knew PHP understood very little in programming concepts in ways that frustrated me how they could be so blind, the people in the IRC rooms for it were no longer a source of help for my questions, and I usually spent more time answering questions and waiting for somebody to turn up whom could answer mine. Usually I ended up solving it myself.
Most the time I realised was people re-solving the same problems over and over again in increasingly bad ways.
I discovered problematic behaviours in PHP which defied logic and reasoning (like the array_merge_recursive family), and discovered functions that were undocumented in how to use them, and when I reported a bug in the functions, my bug was marked as "Bogus" and I was expected to be psychic.
I had a friend whom was constantly proclaiming the goodness of Perl, so I basically gave it a shot and now am hooked like an addict.
Additionally, my experience in other higher-order dynamically typed languages (JavaScript and Ruby, yes, JavaScript is a more powerful language than PHP in terms of language features) left me a knowledge with many ways to solve types of problems easily, but being restricted in such a way I had no way to use these powerful features. Perl satisfied this need.
Why Perl and not Ruby? I've played with Ruby a bit, but my experience taught me the support and documentation is sparse, the language is slow and immature. Nice it may be, but its still in diminished in capacity against Perl from what I've seen. And it shared PHPs major flaw that it has a huge user base comprised of total novices all doing things the wrong way, and I really wanted to not have to deal with that so much.
It's not nice to be elitist, but once you have tried to explain the same thing to 30 people (and taken an hour to get a simple concept into their heads every time) it reaches a point of frustration. (I can't cope with the 'There is somebody on the internet who is wrong' situation, If I can't SEE it, it doesn't happen)
I started doing Perl during my third year in computer science as a part of 'Scripting languages' course. I have a friend studying biotechnology and I helped her with some data mining scripts for dealing with protein databases (parsing text files, regexps, simple integrity checks). It was all very natural to do in Perl.
Then I got my first part-time job and had to use it professionally. I was responsible for developing set of batch scripts that handled some part of business logic in the company. And it was the task where Perl revealed all its potential. Need to get data from DB? - no problem, just go to CPAN. Need to automate wiki - no problem, go to CPAN. The amount of already created modules is overwhelming and you can be sure you will always find what you need in CPAN.
To sum up. For me, Perl is a swiss army knife of scripting languages. Everything can be done in it and it has huge number of additional modules even for very exotic tasks. And by the way, did I mention REGEXPS?
With Perl (and the expressive power behind TMTOWTDI), programming becomes a creative task. I can write if($expr) { $statement; } if I plan on having many else statements, or I can write $statement if $expr; if that makes more sense (for example, I'm fond of writing:
sub doSomething {
my($toObject, $argument) = #_;
die "No object specified" unless defined($toObject);
die "Object invalid: $toObject" unless $toObject->ISA('Example');
# Do stuff
}
but of course that's not always the easiest, and most expressive way of doing it; so I come up with a better way for the task at hand!). People complain because Perl lets you write horrible looking code; I love Perl because it lets me write code which looks pretty to me (and yes, I can see the downside of having a dozen different programmers writing in their own styles; I'll hold to the idea that good writers can be pretty expressive and understandable no matter how different the subject matter).
With other programming languages, I end up having to think my way through abstraction layers (how will this Map give me Collections whose Iterators I can use to ... and so on). With Perl, I'm usually only one abstraction level above basic Perl. For instance, DBI will give me database results as ordinary, everyday Perl scalars, lists and hashes, so everything I know about these simple, core data structures carries over to every task I put DBI to (Complicated data structures? That's what PostgreSQL is for!).
I've only been using Perl full-time for about a year, but these are the big wins for me, and the reason I first went full-time onto Perl after a year suffering at the hands of Java 1.4's Collections model (don't ask). Other programming languages make me feel like I'm putting together a jigsaw puzzle, as you line up all the modules and packages just right; Perl feels like a box full of Legos, with some "special" bricks (like DBI, CGI.pm and Test::*) thrown in for good measure. There are tons of different ways to solve any problem, and Perl lets you try any of them you like, in any way you like.
I'm still not that long time in the Perl community and what me first brought in was Larry Wall's humor and wisdom. True, Perl has it quirks but the language comes from an understanding of things that is very close to mine so I'm much less comfortable with Python and to a lesser degree Ruby.
I don't do web app's more GUI with WxPerl and it works just fine. I'm very interested in languages also in lesser known like factor, boo, rebol and so on but all in all is Perl my choice. and it's because a mixture of powerful syntax (can be very functional if you like it), the community, CPAN of course, and, like I said before, due to the cosy feeling being in the right place.
Perl is its community, which is the reason to use it both on a social and practical level. (See CPAN and Perlmonks, which likely inspired SO.)
There's a lot of freedom when coding in Perl; you can write some wicked-crazy unreadable hacks, but it doesn't take long once you've gotten a feel for the language (and learned how to use perltidy :-) ) before you realize that well-written perl code can look downright pretty.
It's interesting; I ended up as a full-time Perl programmer after learning it for my sysadmin-type job in college; and now it's my strongest skill. I'm going to stick with Perl for a while because so far the language has been versatile to grow with me. I write a lot of systems software in Perl, and decided to pick up web programming for fun, and Catalyst was there waiting for me. Do I want to try out a new language paradigm? Perl will probably support it. In contrast, when I was coding in PHP for a time, I immediately felt like I was pressing against a glass ceiling.
I work as a technological troubleshooter for a big organization in southern OH. I had to learn Perl to keep some automated network text manipulation systems up and running and eventually got a little excited about it. I eventually thought of myself as a developer and wrote some programs that parsed some database data and made some people’s lives a little easier. But after reading some of the posts on this website and listening to the stackoverflow podcast and even starting to read the book Code Complete from someone’s suggested reading list I no longer have any delusions that I was a developer of Perl or any other language for that matter. However, maybe someday I could be.
I had used awk a few time for shell scripts way, way back in the days. In one ancient project we needed to implement the a TELNET protocol connection, so I wrote a quick version in Perl 4. It worked really well, and I started to really like the language.
Later, I wrote a big full commercial web application in Perl 5, complete with it's own framework and database. I was careful not to use to many of Perl's more esoteric features, so the code looked more like C than Perl. It worked really well, performance was good and the code was easily extended.
Recently I've been working in Java, but I often find myself missing the Perl's loose typing, and its ability to encapsulate things way better than Java. My favorite features were being able to put Perl datastructures (arrays and hashes) and code directly in config files and execute them, and the ability to tie code to syntax like arrays. Both lead to some really slick code.
Paul.
simple syntax, powerful scripting capabilities for win32 and unix systems, and totally powerful regex!
I pickup Perl on my first job where I had to write plenty of automation script for electrical engineers to mine datalogs and format them to Excel and sometimes deal with sql server too. With Perl I could usually get something working rather quickly, so all is good in the manufacturing land. :P
I started using Perl as an enhancement to our build process for embedded development. We needed to develop diverse outputs based on our cross compiled payload and Perl was a great fit.
Our enhancements included floating-point to hexadecimal conversion, S-record post-processing, and checksum modifications.
Not that this kind of work can't be done with many other tools, but I would definitely recommend Perl for build-related work.
What brought me to Perl was when I saw the DBI and realized that I could write the ESQL/C programs I was writing at the time in one fifth the time.
What has kept me using Perl is that the two other languages likely to unseat it are both strongly typed. That is
print "10" + 5;
is a type error rather than 15.
I'm not taking it up. I had to work on a project in Perl a few years ago, and I came to really dislike the language. It has a sometimes-awkward syntax and a lot of crazy gotchas that I found hard to work with. Honestly, I think Ruby has superseded Perl in many respects: it's good at roughly the same things, but has much nicer features and is easier to use.
Perl still has CPAN, though, which even Ruby can't match (although Ruby has a lot of useful libraries, too).
I considered learning Perl last year.
It was the only technologies that I actively decided not to learn. This is nothing directly against the language itself, it just seemed that I would be coming to the party 10 years too late. It is very useful for the shell scripting tasks that it was designed for but for me personally I prefer languages with a stronger coherence.
Perl 6 seems like it's on indefinite hiatus and even when it arrives I don't believe that it will make the language profoundly more compelling.
Also, Larry Wall scares me.
For my situation Perl wasn't the right choice and thats why.
Perl is not as bad as I thought. I used to use it in a couple customer scripts about one year ago, and even grew to like it a bit. Then again, I've never ever missed it since.
The reason? It's mostly a write-only language. Going above a 100 line solution made me be wary of my own code, which is definately not a good outcome. With other languages that bar is considerably higher (maybe 1000 or 10000 lines).
I see no reason to go for Perl in new projects, for new users, in -soon- 2009.
Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 4 years ago.
Improve this question
I've started learning Perl but most of my former programming experience has been in languages that emphasize object oriented programming such as C# and Java. All the Perl examples I have found tend to be long single function programs and I find my self writing code the same way. Are there any resources or tutorials for writing maintainable well structured programs?
Firstly, regardless of what sort of Perl programming you're doing, you'll probably find Perl::Critic to be invaluable. The command-line tool is by far the most convenient for getting feedback on your code, but you there is also a web interface where you can upload your Perl code and receive instant, automated feedback. Note that Perl::Critic isn't going to teach you good structure, but it will help improve your style in general, and steer you away from some common mistakes.
To go with Perl::Critic, I'd recommend getting a copy of Perl Best Practices (PBP). It contains a lot of detailed information upon which Perl::Critic was based. Even if you disagree with particular guidelines in the book, it makes you think about how you code, and that's very, very valuable. You don't have to shell out money for a book, but the two compliment each other very nicely, and there are lengthy discussions you'll find in PBP that you won't get from Perl::Critic.
If you've already worked with other OO languages and OO design, the you'll probably find Moose to be a comfortable transition. Moose is very stable, very well supported, and has a huge and active community (especially via IRC). Moose supersedes almost all the existing OO Perl advice out there, including my own. Object Oriented design is common for a reason; it makes sense for a lot of projects, and there's no reason not to use it in Perl.
Personally, I found a massive improvement in my own program structure when I moved to a test-driven development model. Under such a model, breaking a problem down into small, easily tested units is essential. Start with Test::Tutorial if you're new to testing in Perl and then look at some other testing resources or books if you want to learn more. Use a tool like Devel::Cover or Devel::NYTProf to see what your test cases are hitting and what they're not. Having code that's hard to test is often a sign of poor structure.
Having said all this, the best teacher by far is to get involved with an existing Perl project with experienced contributors. See how they do things, and when you make contributions, think about their advice. If you want a real application with awesome cool value that seems to have sucked up the very best and brightest of the Perl community, then I'd recommend getting involved with Padre, the Perl editor.
If (for whatever reason) you can't get involved with another project, then consider posting code samples to communities such as Stack Overflow, or PerlMonks. Better still, if you can make your code open source, then do so, and solicit feedback. All programming languages are better learnt with others who are already familiar with them, and Perl is no exception here.
May you do Good Magic with Perl,
Paul
Perl Best Practices
If you're learning OO Perl you might as well move on to the next big thing and start learning Moose.
Moose is a postmodern object system for Perl 5 that takes the tedium out of writing object-oriented Perl. It borrows all the best features from Perl 6, CLOS (Lisp), Smalltalk, Java, BETA, OCaml, Ruby and more, while still keeping true to its Perl 5 roots.
Moose is 100% production ready and in heavy use in a number of systems and growing every day.
If you already know how to write well-structured programs and you want to write well-structured Perl, but the only impediment to that is the abundance of ancient, crufty, spaghetti-code examples that are scattered around the net and refuse to die...
Ignore the examples. Or at least ignore their poor structure and only pay attention to the small syntactic bits that you need to learn from.
There is nothing in Perl that pushes you to write bad code. If you already know how to write good code in other languages, then you can apply the exact same principles and practices in Perl. It's merely a matter of discipline, just like in any other language.
If you feel you already are learning the basics and want to improve program structure, then I'd suggest these books, probably best to read in this order:
Intermediate Perl -- this is probably the place to start for what you're asking about; covers developing and using Perl modules (essential for good structure), references, complex data structures, OO, and more
Perl Medic: Transforming Legacy Code -- demonstrates well-structured Perl by showing how to fix poorly-structured Perl
Effective Perl Programming: Writing Better Programs with Perl -- a classic, but still useful; full of Perl idioms that will help you write more Perl-ish Perl; not much on OO, but covers more fundamental coding structures to make your code more succinct and yet more expressive. I think of this as the book that got me from Perl literacy to Perl fluency
All three are best once you've comfortable with basic Perl syntax, but none of them get too far into esoteric advanced concepts that you can't follow if you're still starting out in Perl but have reasonable programming experience in other languages already.
Apart from the sources mentioned above I strongly recommend the book
"Higher-Order Perl" by Mark Jason Dominus.
If you can afford it buy it, otherwise the author has put the book on his website for free as in free beer, Free Higher Order Perl. For the PDF version: direct download URL (1.9 MB).
Edit:
I forgot to mention Perl Design Patterns. The PerlDesignPatterns site is a very good resource or reference for learning Perl design patterns.
Object-Oriented Perl
http://perl.about.com/od/objectorientedperl/Object_Oriented_Perl.htm
http://www.codeproject.com/KB/perl/camel_poop.aspx
http://www.tutorialspoint.com/perl/perl_oo_perl.htm
Personally, I didn't write good OO Perl until I started learning Java. I recommend you spend a small amount of time learning OO in a true OO language and apply what you learn to Perl.
For a place to be mentored, PerlMonks is GREAT.
Write Perl the way you would write C, although you should take advantage of some things BEGIN blocks and modules. It should be formatted so that it looks more or less like old style K&R C code.
As for structure, skip the OO stuff and style it as ADTs instead:
http://en.wikipedia.org/wiki/Abstract_data_type
Basically you do this by using data-structures where you would have used objects in OO (and separating out the algorithms into their own functions).
Then, pick only one way to do things and stick to it, consistency is vital to readability.
If you manage that, the code can be both readable and easy to understand.
Paul.