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

Hi,

Thank you for the quick reply!

I'm new to Perl. Last time I remember making Windows programs was 25 years ago.
With VB, and it was easy as Windows 3.0. Now it's so complicated.

The Strict and Warnings were holding me up from going further. I do plan on adding them back.

Re your while problem: perhaps using an equality test rather than an assignment would be worth considering?
I don't know what to put there instead of while.

And, "return where?" -- looks to me like an exit from the package to return to your main.
I don't want to exit...I think? I need the server to stay online and listen for new commands, then update the text.
I also don't want the text highlighted. The recorded text should remain in the box un-editable.

Replies are listed 'Best First'.
Re^3: Wx Server reform
by ww (Archbishop) on Jun 03, 2012 at 14:24 UTC
    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."
      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.