in reply to Wx Server reform

Not a full answer to your problems... but a start: At line 7 (and numerous other spots), you comment out "use strict;" and/or "use warnings;"

That's a mistake.

strict will tell you when and where (or pretty close) you've made typos (such as using two different spellings for a single $var) and the like. Keep "use strict" (and "use warnings") in ALL your code until you know precisely why you should omit it.

OTOH, you're probably right about deleting "use 5.008" unless you are using a very old version of Perl. Current is 5.16 (or 5.14 if your vendor hasn't caught up).

Now, some WAGs, as I find your problem statement and code confusing (or maybe because it's pre-caffeine of a Sunday am):

Re your while problem: perhaps using an equality test rather than an assignment would be worth considering?

And, "return where?" -- looks to me like an exit from the package to return to your main.

Thank goodness, the kettle's whistling.

Replies are listed 'Best First'.
Re^2: Wx Server reform
by gg4000 (Novice) on Jun 03, 2012 at 13:08 UTC
    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.

      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??? } }