in reply to Re^2: Wx Server reform
in thread Wx Server reform

  1. strict and warnings: Put them back NOW. Let Perl help you see (some of) your (other) mistakes.
  2. while: The suggestion was that you pay attention to the difference between =, assignment and ==, equality test.
  3. return: Since you didn't understand the above and you don't seem know where you're sending a return value, you probably should heed -- assiduously -- the suggestion "study a good book on fundamentals."

Replies are listed 'Best First'.
Re^4: Wx Server reform
by gg4000 (Novice) on Jun 03, 2012 at 15:00 UTC
    Use Strict gives me BareWord "AHCMD" line 55.
    AHCMD is needed.

    Use Warnings gives me Useless use of 1's complement (~) in void context line 53.
    If I comment out line 53, the command to the system does not work. Line 53 is needed. Somehow it filters out the text "Get", "HTTP", etc

    Updated code:
    #!/usr/bin/perl package main; use IO::Socket; use Sys::Hostname; use Socket; use strict; use warnings; use Wx; use wxPerl::Constructors; use base 'Wx::App'; use Wx qw(wxTE_MULTILINE wxVERTICAL wxID_DEFAULT); my($ipaddr)=inet_ntoa((gethostbyname(hostname))[4]); my $local; my $addr; my $path; my $app = Demo::App->new; $app->MainLoop; package Demo::App; use base 'Wx::App'; sub OnInit { my $frame = Demo::App::Frame->new; $frame->Show(1); } package Demo::App::Frame; use Wx qw(:everything); use base 'Wx::Frame'; sub new { my ($class) = @_; my $self = $class->SUPER::new( undef, -1, "X10 Voice Commander", wxDefaultPosition, wxDefaultSize, );$local = IO::Socket::INET->new( Proto => 'tcp', # protocol LocalAddr => "$ipaddr:8086", ) or die "$!"; $local->listen(); $local->autoflush(1); while($addr = $local->accept() ) { while (<$addr>) { $path = "C:/Program Files (x86)/Common Files/X10/Common"; chdir($path) or die "Cant chdir to $path $!"; ~s/GET//,~s/~/ /g,~s/%20/ /g,~s/%22/ /g,~s/x10command=DEVICE/ +/,~s/\//\ /g,~s/[?]//g ,~s/'/ /g,~s/HTTP/ /,~s/1.1/ /g,~s/sh://; system(AHCMD. "$_"); $self->{text} = Wx::TextCtrl->new($self, -1, "", [-1,-1], [500, 50 +0], wxTE_MULTILINE); $self->{text}->WriteText("Use Your IP $ipaddr:8086 on your device. +\n"); $self->{text}->WriteText("Connection From: "); $self->{text}->WriteText($addr->peerhost()); $self->{text}->WriteText("\n"); $self->{text}->WriteText("Received: $_"); print "Received: $_"; close $addr; } return $self; #This has something to do with it? Return where??? } }
      Use Strict gives me BareWord "AHCMD" line 55. AHCMD is needed.

      For what? Do you (not perl) think it is a constant? Perl does not think so. Maybe you need to import that constant explicitly. Do you (not perl) think it is a function without arguments? Then add explicit braces, and make sure perl knows that function (again, import it explicitly if it is not automatically exported). Do you (not perl) think it is an old-style file handle? Replace it with a lexical handle. Do you (not perl) think it is a string that does not strictly have to be quoted? Then add quotes.

      Use Warnings gives me Useless use of 1's complement (~) in void context line 53. If I comment out line 53, the command to the system does not work. Line 53 is needed.

      Looks like a typo. Do you want a string match (=~) or a smart match (~~)?

      Line 53 is

      ~s/GET//,~s/~/ /g,~s/%20/ /g,~s/%22/ /g,~s/x10command=DEVICE//,~s/\//\ + /g,~s/[?]//g ,~s/'/ /g,~s/HTTP/ /,~s/1.1/ /g,~s/sh://;

      And that ~ in front of every substitution operator is plain nonsense. Read perlsyn.

      Alexander

      --
      Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so". ;-)
      "AHCMD is needed.
      ...
      Line 53 is needed.</i?"

      "(N)eeded," maybe. Need to be corrected; definitely!

      When the pragmas provide the kind of information you've now observed, they're not telling you that something is "un-needed." They're telling you that you haven't written the Perl (the code) correctly; that you need to fix the errors before you can move on.

        Thanks to you, I removed all the ~ on line 53 and it still works and the warning went away.

        Next is Making Perl know AHCMD has to be used.

        system(AHCMD. "$_")
        is sent to the path that contains AHCMD.exe. The arguments are what the client sent. A1 On or A1 Off, etc.