Переменная связь несколько раз - PullRequest
4 голосов
/ 25 августа 2011

Могу ли я связать переменную несколько раз? Я бы попробовал сам, но я не уверен в синтаксисе. Я хочу связать хеш с Cache :: Memcached :: Tie и IPC :: Shareable .

Ответы [ 3 ]

6 голосов
/ 25 августа 2011

Нет. Подтверждая предположение bvr, переменная может иметь только одну «связанную» магию. Когда вы вызываете tie для уже связанной переменной, существующая магия связи (и связанный связанный объект) отбрасывается до создания новой связи.

Пример игрушки:

package Foo;
sub TIESCALAR { return bless [] }
sub DESTROY { print "Destroying Foo\n" }

package Bar;
sub TIESCALAR { return bless [] }
sub DESTROY { print "Destroying Bar\n" }

package main;
tie my $var, "Foo";
print "Tied to ", ref tied $var, "\n";
tie $var, "Bar";
print "Tied to ", ref tied $var, "\n";

Выход:

Tied to Foo
Destroying Foo
Tied to Bar
Destroying Bar
4 голосов
/ 25 августа 2011

Мало того, что это невозможно, но и не имеет смысла. Что выборка должна означать в этом контексте? Как бороться с ними, возвращая два разных значения?

Я подозреваю, что вам нужна многоуровневая система кеширования, для этого вам может понадобиться CHI .

1 голос
/ 25 августа 2011

Я не думаю, что можно привязать два класса к одному предмету.Запустив галстук во второй раз, просто удалите исходную ссылку и замените ее новой.

Однако должна быть возможность написать какую-то мультидиспетчерскую.Я имею в виду написание класса, который принимает несколько других классов и вызывает их соответствующие методы, такие как FETCH или STORE.

...