タイスカラーを使用して、コードベースにいくつかの機能を追加しようとしています。
スカラーを返すように指定された関数があります。これらのスカラーを返す前に結合することでシステムにいくつかの機能を追加できると思いましたが、戻りの直前に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
参照を返し、アクセスごとに逆参照することで目的の出力を取得できますが、それによって確立されたインターフェイスが台無しになり、ユーザーが混乱しやすくなります。
-バック