http://qs321.pair.com?node_id=1174906


in reply to Re: Moving from scripting to programming
in thread Moving from scripting to programming

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 :).

Replies are listed 'Best First'.
Re^3: Moving from scripting to programming
by stevieb (Canon) on Oct 28, 2016 at 19:32 UTC

    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 ;)