Если бы у меня был простой связанный скалярный класс, который увеличивается при каждом чтении, я мог бы сделать это так:
package Counter;
use strict;
use warnings;
sub TIESCALAR {
my $class = shift;
my $value = 0;
bless \$value, $class;
return \$value;
}
sub FETCH {
my $self = shift;
my $value = $$self;
$$self++;
return $value;
}
sub STORE {
my $self = shift;
$$self = shift;
}
1;
Однако для создания переменной-счетчика я должен использовать tie
. Я мог бы создать один счетчик и экспортировать его. Но что я действительно хочу сделать, так это сделать так, чтобы это выглядело OO. Кажется, я мог бы создать метод new
следующим образом:
sub new {
my $class = shift;
my $counter;
tie $counter, $class;
return $counter;
}
затем в моем основном сценарии получите два счетчика, выполнив следующие действия:
my $counter1 = Counter->new();
my $counter2 = Counter->new();
Я предполагаю, что это не работает, потому что галстук не выдерживает копию (я где-то читал это в документации), просто нет способа сделать это?
NB. Я знаю, что это всего лишь вопрос стиля, но это выглядело бы правильнее для глаз.