in reply to Undef doesnt work?This has got me stumped

I'm not exactly sure what you expect to happen, but I'm trying to interpret what you see:

You're not using strict, which is always a bad idea. In your case, it is a bad idea, because it allows you to be lax about where $blah is defined and used. Perl thinks you want $blah to be used as a global variable, that is why you see the value of $blah increasing in each call to printblah.

In testob::new(), you never give $self->{blah} a value, so it will be 1 after you increment it, which is then what is printed. If you want to hold on to $testo in your main loop, you would need to keep it declared on the outside of the loop, or turn your testob::new() subroutine into a subroutine that only returns one and the same object (fancy speaking people call this a "Singleton"):

{ my $singleton; sub new { if (! $singleton) { my $class=shift; $singleton = {@_}; bless($singleton,$class); }; return $singleton; };