プライベートメソッドのとき無名関数を使うんですが

後にかかないと エラーでちゃいます

無名関数はプロトタイプ宣言できないのでしょうか?

package car;
sub new{
my $self=shift;
return bless({},$self);
}
my $punk=sub{
my $self=shift;
print "punk!";
};
sub boo{
my $self=shift;
print "booo!";
$self->$punk;
}

$punkを後に書くとエラーでます
やはり前に書くしかないのでしょうか?