Perl Anfänger: Eigenschaft setzen - komisches Verhalten

Beitrag lesen

Hi

sorry - ich hab wohl das Beispiel zu sehr gekürzt ;-)

use strict;  
  
sub new {  
  my $self = shift;  
  return bless {  
    eigenschaft => '',  
    fill => 'abcdef0123456789',  
  }, ref $self || $self;  
}  
sub methode1(){  
  my $self=shift;  
  srand(time);  
  while(length($self->{eigenschaft}) < 50) {  
    $self->{eigenschaft} .= substr($self->{fill}, int(rand(length($self->{fill}))), 1);  
  }  
  print $self->{eigenschaft}."\n"; # liefert das richtige Ergebnis  
  print &methode2($self)."\n"; # liefert hin+wieder das falsche Ergebnis  
  print $self->{eigenschaft}."\n"; # liefert das richtige Ergebnis  
}  
sub methode2(){  
  my $self=shift;  
  if($self->{eigenschaft} == ''){ # warum ist dieser Ausdruck hin+wieder wahr?  
    return '###'.$self->{eigenschaft};  
  }  
  else{  
    return $self->{eigenschaft};  
  }  
}

dieses Beispiel ist aber lauffähig

als Ausgabe erhalte ich z.B.
afabf0ab0d65ed122d8a2aa444d8c4a085fca7a27d37d10089
###afabf0ab0d65ed122d8a2aa444d8c4a085fca7a27d37d10089
afabf0ab0d65ed122d8a2aa444d8c4a085fca7a27d37d10089

folgendes Beispiel schlägt bei mit immer fehl

use strict;  
  
sub new {  
  my $self = shift;  
  return bless {  
    eigenschaft => '',  
  }, ref $self || $self;  
}  
sub methode1(){  
  my $self=shift;  
  $self->{eigenschaft} = 'a';  
  print $self->{eigenschaft}."\n"; # liefert das richtige Ergebnis  
  print &methode2($self)."\n"; # liefert das falsche Ergebnis  
  print $self->{eigenschaft}."\n"; # liefert das richtige Ergebnis  
}  
sub methode2(){  
  my $self=shift;  
  if($self->{eigenschaft} == ''){ # warum ist dieser Ausdruck wahr?  
    return '###'.$self->{eigenschaft};  
  }  
  else{  
    return $self->{eigenschaft};  
  }  
}

Ausgabe:
a
###a
a

Danke!