in reply to How to detect a hash container key from a referenced sub value

Forgive me if I've missed something obvious, but why don't you just create a subroutine that accepts a hash and calculates the sum.

My thoughts too. If you employ Phrase objects, you can even make it so that the total will automatically update as you add a new quantity key, e.g. "qtyCont":

use strict; use warnings; use 5.010; use Phrase; my $phr1 = Phrase->new(); $phr1->quantities("qty", 1); say $phr1->total_quant; $phr1->quantities("qtySum", 5); say $phr1->total_quant; $phr1->quantities("qtyCont", 8); say $phr1->total_quant; --output:-- 1 6 14

/\/\/\/\/\/\/\

package Phrase; use strict; use warnings; use 5.010; sub new { my $self = {}; $self->{QUANTITIES} = {}; $self->{TOTAL_QUANT} = 0; bless($self); return $self; } sub total_quant { my $self = shift; return $self->{TOTAL_QUANT}; } sub quantities { my $self = shift; my $key = shift; if (@_) { my $quant = shift; $self->{QUANTITIES}->{$key} = $quant; $self->{TOTAL_QUANT} += $quant; } return $self->{QUANTITIES}->{$key}; } 1;

Replies are listed 'Best First'.
Re^2: How to detect a hash container key from a referenced sub value
by igoryonya (Pilgrim) on Dec 03, 2009 at 10:56 UTC
    So, I get it now, the verdict is that I have to create a module (package) to describe an object. I guess, I should read about objects. I've made attempts to learn it before, but there were few things that stopped me. One that I described in reply to FalseVinylShrub, the inability to use the same script file for describing an object and also, I couldn't understand the purpose of the bless function.

      I couldn't understand the purpose of the bless function

      Normally, if you have a hash reference:

      my $hash = { a => 1, b => 2 };

      you can write:

      say $hash->{a};

      but you cannot use a hash reference to call a function, e.g.

      $hash->some_func()

      If you look at the code that creates a class, the new() function creates a variable called $self and assigns it a reference to a hash. bless() makes it so that you can use the hash reference to call functions.

      An object is different from any other data type in Perl in one and only one way: you may dereference it using not merely string or numeric subscripts with simple arrays and hashes...

      $aref->[0]
      $href->{'a'}

      ...but with named subroutine calls...

      $href->some_func()

      In a word, with methods.

      perltoot