Я пишу скрипт Perl, который получает данные из изменяющегося внешнего источника. Поскольку данные добавляются или удаляются из этого внешнего источника, я хотел бы, чтобы структуры данных в моем скрипте Perl отображали изменения. Я смог сделать это, создав объекты, которые хранят данные аналогичным образом, и синхронизируя данные в этих объектах всякий раз, когда я пытаюсь получить доступ к данным в моем сценарии Perl.Полностью уничтожить все следы объекта в Perl
Это прекрасно работает и получает новые данные, которые добавляются к этому внешнему источнику; однако возникает проблема при удалении любых данных. Если какие-либо данные удалены, я хочу, чтобы все существующие ссылки на него в моем скрипте Perl также были уничтожены, поэтому пользователь больше не может пытаться получить доступ к данным без повышения ошибки.
Единственный способ, которым я мог думать только о том, чтобы указаного внутреннюю ссылку на данные, как только не будет определено, что данные больше не существует. Однако, похоже; что, когда ссылка не определена, она не удаляет данные, хранящиеся в местоположении ссылки, она удаляет только данные из переменной, которая содержит ссылку.
Вот тестовый скрипт демонстрирует мою проблему:
#!/usr/bin/perl
# Always use these
use strict;
use warnings;
####################################################################################################
# Package to create an object
package Object;
use Moose;
# Define attributes
has 'name' => (is => 'ro', isa => 'Str', required => 1);
####################################################################################################
# Package to test with
package test;
# Create an object
my $object1 = Object->new('name' => 'Test Object');
print 'OBJECT1 NAME: '.$object1->name()."\n";
# Create another reference to the object
my $object2 = $object1;
# Print the name
print 'OBJECT2 NAME: '.$object2->name()."\n";
# Print both references
print "\n";
print "OBJ : $object1\n";
print "OBJ2 : $object2\n";
print "\n";
# Undefine the reference to object2
undef $object2;
# Try to print both names
print 'OBJECT1 NAME: '.$object1->name()."\n";
print 'OBJECT2 NAME: '.$object2->name()."\n";
Как я могу полностью уничтожить все следы объекта, так что любая попытка получить доступ к его данным приведет к ошибке?
EDIT:
Вот другой пример, который может лучше объяснить, что я пытаюсь достичь.
Скажем, у меня есть файл объект:
my $file = File->new();
Теперь я хочу, чтобы получить текст в этом файле
my $text = $file->text();
Теперь я снова (по неизвестной причине)
my $text2 = $file->text();
Я хочу, чтобы иметь возможность изменять $text
и напрямую влиять на содержимое $text2
, а также изменять фактический атрибут text
файла.
Я в основном пытаюсь связать переменные вместе, поэтому, если они меняются, все они меняются. Кроме того, если удалять, все они будут удалены.
Это также означает, что при изменении атрибута text
$text1
и $text2
также изменились бы с ним, чтобы отразить новое значение.
Это может быть сделано с использованием псевдонима какого-то рода?
Так что вы хотите '$ object1' стать' undef' после ввода 'UNDEF $ object2'? –
Да, это то, что я ищу. – tjwrona1992
См. Также [Как вы явно уничтожаете объект в Perl?] (Http://stackoverflow.com/questions/10772220/how-do-you-explicitly-destroy-an-object-in-perl) –