I think, even better if initialize magic numbers and symbols use constant NEWLINE_SYMBOL => chr(10); use constant SOME_MEANINGFULL_NAME => 9999;
чт, 18 июня 2015 г. в 16:54, Shlomi Fish <shlo...@shlomifish.org>: > Hi Marco, > > see below for my response. > On Thu, 18 Jun 2015 15:17:27 +0200 > Marco <ma...@marcobaldo.ch> wrote: > > > Hello. > > > > I need some help in understanding why the first > > > > my ($Count,$Saw)=$self->{_Portobj}->read(1); > > > > is executed without any problem , however the second identical statement > > inside the while loop fails with the error > > > > Can't call method "read" on an undefined value at wt800.pm line 121 > > > > The problem is that you misspelled "_Portobj" as "_PortObj". This is > easier to > catch if you use accessors: > > * > http://perl-begin.org/tutorials/bad-elements/#accessing_object_slots_directly > > > The idea behind this coding is to be able to use any object providing a > > "write" and a "read" method inside my object. (i.e. > > messageDevice::SerialPort) > > > > I'm using Perl 2.7 on a OpenSuSE 13.2 system. > > > > What do you mean by "Perl 2.7"? We're way past both Perl 2 and Perl 5.002. > > > Any hint? > > > > Tnx > > > > Marco > > > > Some more comments on your code: > > > > > sub get_answer { > > > > my ($self,$Orig_ref) = @_; > > > > I personally don't like the "$Orig_ref" identifier style. "$orig_ref" or > less > preferably "$origRef" are better. > > > print $self,"\n"; > > > > my $stat=$self->{_Portobj}->write("aaaa") or die "pippo"; > > my ($Count,$Saw)=$self->{_Portobj}->read(1); > > > > You need some whitespace here (before/after the "=", etc.) > > > my $Count=9999; > > my $Saw=""; > > my @Resp; > > > > print $self,"\n"; > > > > while (($Saw == chr(10)) or ($Count == 0)) { > > $Saw == chr(10) should probably be "$Saq eq chr(10)". > > > print $self,"\n"; > > my ($Count,$Saw)=$self->{_PortObj}->read(1); # will read > > 1 char > > Misspelling here. > > > push(@Resp,ord($Saw)); > > Missing whitespace. > > > print ord $Saw,"\n"; > > } > > > > } > > > > _Portobj is initialized in myObject as: > > > > sub new { > > > > my $class = shift; > > my $Tpobj = shift; > > > > my $self = { > > _Portobj => $Tpobj, > > .... > > > > You could separate the identifiers' components using underscores. > > > And the main () is > > > > my $PortObj = new Device::SerialPort ($Portname, $Quiet) > > or die "Can't open device $Portname: $!\n"; > > > > my $Object = new myObject($Portobj); > > > > Indirect object notation: > > http://perl-begin.org/tutorials/bad-elements/#indirect-object-notation > > Regards, > > Shlomi Fish > > (NOTE: perl-begin.org is a site I initiated and maintain) > > -- > ----------------------------------------------------------------- > Shlomi Fish http://www.shlomifish.org/ > Escape from GNU Autohell - > http://www.shlomifish.org/open-source/anti/autohell/ > > When Chuck Norris drops a cat, it falls on its back so it won’t lose > eye contact with Chuck. > — http://www.shlomifish.org/humour/bits/facts/Chuck-Norris/ > > Please reply to list if it's a mailing list post - http://shlom.in/reply . > > -- > To unsubscribe, e-mail: beginners-unsubscr...@perl.org > For additional commands, e-mail: beginners-h...@perl.org > http://learn.perl.org/ > > >