- 论坛徽章:
- 0
|
本帖最后由 3gtan 于 2010-04-07 13:38 编辑
- package ShiftString;
- use overload
- '>>' => \&right_shift,
- '""' => sub { ${ $_[0] } };
- sub new {
- my $class = shift;
- my $value = shift;
- return bless \$value => $class;
- }
- sub right_shift {
- my ($x, $y) = @_;
- my $value = $x;
- substr($value, -$y) = "";
- return bless \$value => ref($x);
- }
- $camel = ShiftString->new("Camel");
- $ram = $camel >> 2; #****************貌似 $camel 调用 overload的 “” 返回 dereference “Camel” 才对啊。
- print $ram; # Cam
复制代码 sub right_shift {
my ($x, $y) = @_;
my $value = $x;
substr($value, -$y) = "";
return bless \$value => ref($x);
}
这部分里面my $value = $x; 应该是$value = $$x;
我的理解是 匿名数组 返回 第一个参数的 dereference
但是看这个例子 貌似 $camel 应该返回 字串符
然后 sub right_shift
里面竟然用 $$X 又一次 dereference???? |
|