in reply to Tied array to track last-accessed element

My only comment is to purvey the methods as functions, which is what I do in most of my tie-related modules:
package Tie::Array::LastIndex; # ... use Carp 'croak'; use Exporter; @EXPORT = qw( which what ); # ... sub which (\@) { my $aref = shift; my $obj = tied @$aref; croak "which() only accepts arrays tied to " . __PACKAGE__ unless $obj and $obj->isa(__PACKAGE__); return $obj->{INDEX}; } sub what (\@) { my $aref = shift; my $obj = tied @$aref; croak "what() only accepts arrays tied to " . __PACKAGE__ unless $obj and $obj->isa(__PACKAGE__); return $obj->{ARRAY}[ $obj->{INDEX} ]; }
Like so.
_____________________________________________________
Jeff japhy Pinyan, P.L., P.M., P.O.D, X.S.: Perl, regex, and perl hacker
How can we ever be the sold short or the cheated, we who for every service have long ago been overpaid? ~~ Meister Eckhart

Replies are listed 'Best First'.
Re^2: Tied array to track last-accessed element
by davido (Cardinal) on Sep 23, 2004 at 21:53 UTC

    The way you've got them set up, which() and what() can only be used as functions, not as methods, right? I have mixed feelings on the suggestion. I'll express what I see as the pros and cons, and maybe you can let me know what I'm leaving out.

    Pros to exporting functions for this tied array class:

    • Simpler interface -- Doesn't require Object Oriented understanding.
    • Faster -- Object oriented solutions have extra overhead (but a tied array is an object anyway, and the functional which() and what() do even more extra work in discovering the object of the tie).

    Pros to using the OO interface:

    • which() and what() are not exactly uncommon words. Reserving them as object methods keeps them from mucking up global namespace.
    • which() and what(), as names, make more sense to me when they're directed to a tied object, than to an array reference. $tied_array->which() means more to me than which(@array), because it tells me (the casual reader) that which() is a method of this class, rather than just some exported funtion from who-know-which package.

    But I am not necessarily seeing the whole picture, and I value your opinion, so please do let me know what arguments would best support exporting which() and what() as functions. ...If I were to go ahead an implement that suggestion, I might export them with more explicit names, such as which_index() and what_value()... or some-such.

    I like your use of Carp croak(). I'll look at working that into the code in the meantime.


    Dave

      The main reason I create functions instead of methods for my tied data types is because tying variables is supposed to be a transparent act, and calling a function with that array should be just as transparent.
      _____________________________________________________
      Jeff japhy Pinyan, P.L., P.M., P.O.D, X.S.: Perl, regex, and perl hacker
      How can we ever be the sold short or the cheated, we who for every service have long ago been overpaid? ~~ Meister Eckhart