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/
>
>
>

Reply via email to