Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation

Re^5: Use method/function signatures with Perl

by Juerd (Abbot)
on Dec 07, 2004 at 18:53 UTC ( #412971=note: print w/replies, xml ) Need Help??

in reply to Re^4: Use method/function signatures with Perl
in thread Use method/function signatures with Perl

Funny. I thought that I just said that Attribute::Property is an unacceptable solution to me. That means that it doesn't take away the issue.

I'm not disagreeing about that. You said that I indicated something; I cannot recall having indicated that exact thing, and tried to correct.

Let's not make a big deal out of everything. Feel offended if you wish, but please only do so knowing that I didn't mean "flawed" as an absolute condemnation and that no offense was intended. I like Perl for its tolerance towards almost all programming styles, but that doesn't mean I steer clear of discussion.

With OO I'd expect to be able to do something like create a Length module, Length objects can be accessed/set in various units (inches, meters, feet, miles, etc). An external user should have no idea what the internal representation is. How do I do it with lvalues?

In that rather specific case I would not use lvalues, or any setter method, for that matter. I'd be inclined to think of these values as immutable objects, and have something like:

package Length; sub new { my ($class, $value, $unit) = @_; # Create $self and store the value in standard form. # In case of length this means converting the length to meters. } sub as_km { shift->{_m} / 1000 } sub as_hm { shift->{_m} / 100 } sub as_dam { shift->{_m} / 10 } sub as_m { shift->{_m} } sub as_dm { shift->{_m} * 10 } sub as_cm { shift->{_m} * 100 } sub as_mm { shift->{_m} * 1000 } # Or, if this were really something I made, just: sub as { my ($self, $unit) = @_; # ... }
But instead of using Length objects, I am much more likely to dictate that every length must be stored in meters, as a number. Possibly with the addition of utility functions to aid in conversion.

And whichever I do, I'll feel free to dislike people who categorically declare that my considered set of choices are flawed.

I'm sorry you make this about people. I wonder, though, how you survive PM if you take offense every time someone disagrees with you on a technical subject. You are of course free to dislike me, or any person. Even though we will probably never meet in person, I regret that you dislike *me* instead of only what I said.

Juerd # { site => '', plp_site => '', do_not_use => 'spamtrap' }

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://412971]
and snow settles gently...

How do I use this? | Other CB clients
Other Users?
Others wandering the Monastery: (9)
As of 2018-07-19 12:04 GMT
Find Nodes?
    Voting Booth?
    It has been suggested to rename Perl 6 in order to boost its marketing potential. Which name would you prefer?

    Results (407 votes). Check out past polls.