Я пытаюсь добавить некоторые функциональные возможности в нашу базу кода, используя привязанные скаляры.возвращает лениво-вычисленный скаляр, в perl
У нас есть функция, которая указана для возврата скаляров. Я думал, что могу добавить некоторые функции в систему, привязав эти скаляры до их возвращения, но похоже, что метод FETCH вызывается непосредственно перед возвратом, что приводит к возврату несвязанного скаляра.
Есть ли способ обойти это?
Я действительно хочу сохранить интерфейс подпрограммы (возвращающие скаляры) неповрежденными, если это вообще возможно.
use strict;
use warnings;
main();
sub GetThing{
my $thing;
tie $thing, 'mything', @_;
return $thing;
}
sub main {
my %m;
$m{pre} = GetThing('Fred');
print "1\n";
print $m{pre};
print "2\n";
print $m{pre};
print "3\n";
}
package mything;
require Tie::Scalar;
my @ISA = qw(Tie::StdScalar);
sub TIESCALAR {
my $class = shift;
bless {
name => shift || 'noname',
}, $class;
}
sub FETCH {
my $self = shift;
print "ACCESS ALERT!\n";
return " NAME: '$self->{name}'\n";
}
Желаемый результат:
1
ACCESS ALERT!
NAME: 'Fred'
2
ACCESS ALERT!
NAME: 'Fred'
3
я могу получить желаемый результат, возвращая ссылки, и разыменования при каждом доступе, но губит наш установленный интерфейс и делает его более запутанным для наших пользователей.
--Buck
«Код доступен по запросу» - запрошен. –