Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister
 
PerlMonks  

Re: Moving from scripting to programming

by stevieb (Canon)
on Oct 28, 2016 at 09:03 UTC ( #1174892=note: print w/replies, xml ) Need Help??


in reply to Moving from scripting to programming

Excellent answers so far, I especially liked the recommendations for learning about unit testing.

I wouldn't say that object oriented is more advanced than functional, it's just a different way to do something. The biggest benefit I get from OO is the ability to keep state, as well as being able to include objects within other objects and the ability to pass objects around as other function/method (a method is a function that is called through an object or a class) parameters.

Although there have been great recommendations so far, I like to plug Learning Perl Objects, References and Modules by Randal Schwartz whenever I can (more for the references part, but if you want to advance, mastering references is a very good place to start, as that's what an object is anyway). This book covers a few topics that will get you going forward.

  • Comment on Re: Moving from scripting to programming

Replies are listed 'Best First'.
Re^2: Moving from scripting to programming
by SuicideJunkie (Vicar) on Oct 28, 2016 at 13:53 UTC

    IMO, there doesn't need to be a sharp distinction between the two.

    I've got a scheme I've been using in which everything is contained in a $universe hashref, which contains a set of game objects, which themselves contain plenty of hashrefs and/or arrayrefs for sub-objects as applicable.

    Very conveniently, the entire state can be saved and reloaded as a basic vanilla data structure with Storable.

    It is object oriented in the sense that each module of the project deals with a certain strata of the universe tree and each element in that layer is best thought of as an object. But the code is given the objects instead of the objects having the code.

    There are few safety rails with this setup, and a bit of crossover between objects, but a little self control goes a long way and the freedom is wonderful when you don't have to deal with other people :).

      Very good points you've made.

      "IMO, there doesn't need to be a sharp distinction between the two."

      Agreed, and in fact, in certain modules I've written, I provide a new() function that returns a standard blessed-hash object and the other functions then become methods, but internally it's an illusion, as there's no ties to OO at all, and the functions can be exported as well for those who prefer functional (this is a module that wraps a C library, so I wanted a user to be able to use it in the same way they would the real library, or Perl OO if they chose:

      Example:

      sub lcd_home { shift if @_ == 2; lcdHome($_[0]); } sub lcd_clear { shift if @_ == 2; lcdClear($_[0]); } sub lcd_display { shift if @_ == 3; my ($fd, $state) = @_; lcdDisplay($fd, $state); }

      That effectively wipes out a class or object. No param checking as I just pass that off to the C library which already takes care of that. The same module also exports the C function calls in their original naming convention (camelCase) if desired alongside the more perlish snake_case. A functional module that also acts OO-ish. Perl: TMTOWTDI ;)

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1174892]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others pondering the Monastery: (6)
As of 2020-04-08 19:14 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    The most amusing oxymoron is:
















    Results (45 votes). Check out past polls.

    Notices?