>>783
ええとだから、780さんが言っている通りです。
sub hoge {
return my $foo = 3;
}
と書けるかどうか。

それと、無名ハッシュリファレンスをそのままreturnしても、
無名ハッシュの中で $self 使ってるから動きません。

無名サブルーチンを定義した際、$selfは各無名サブルーチン内でグローバルスコープを持ちます。
$x, $y が独立した値を扱えるようにする為にも、
String_new() 内では、$selfを毎回新規作成する必要があります。
だから、my $self; してから、$self = { (略) };
こんなんで合ってるかな。

まぁ、あんまり効率的でもないし、あまりオススメもできないコードです。
無名サブルーチン定義時のスコープについてよく分からなければ「黒豹本(Advanced Perl Programming, 日本語名忘れた…)」を読んでください。