Gedi wrote:

> Hi all,
>
> I have recently started to learn perl. After reading Randal Schwartz’s
> Learning perl, I decided to give my first program a whirl.
> Upon writing it, I was checking each section of code as I went along to
> make sure everything worked.
>
> I got to one section and couldn’t get it to run as a subroutine. I don’t
> fully understand the error I am getting and am hoping somebody can point
> me in the right direction.
>
> Here is a snippet of my code (edited/reduced to about ¼ of the full
> size) which gives the same error as my full program.

What error?  It helps to paste in the error message, as well as marking the
line numbers it references.

> #usr/bin/perl -w
>
> #use strict;

Nuh-uh.  You are not ready for help from others when you refuse it from your
compiler.  Strict compilation should ALWAYS be your first line of defense
against logic errors.

>
> use warnings;
> use IO::Socket;
>
> print "1. network Listing only\n";
> print "2. Port scan only\n";
>
> print "\nPlease enter selection: ";
> chomp (my $selection = <STDIN>);
>
> if ($selection == 1) {
>      #bla bla, don't need this info
> }
> elsif ($selection == 2) {
>      print "\nEnter target: ";
>      chomp(my $target = <STDIN>);
>      print "Enter start port: ";
>      chomp(my $port = <STDIN>);
>      print "Enter end port: ";
>      chomp(my $end_port = <STDIN>);
>      &scan;

I don't know if this is the error line, but it is not good.  Only use this
when you are handing a function reference to a callback.  Under normal
circumstances, you should use scan();

>
> }
>
>
> sub scan {
>
>      print "Scanning $target | from port $port to $end_port\n\n";

Where idid these variables come from.  No such variables have been declared
within either the scope of the function or the main namespace.  I notice,
though that you do declare and assign values to, then never use,
similarly-named variables within an elsif block above.  Did you mean to
declare them in the main namespace, then assign them within the else block?

>      foreach (; $port<=$end_port; $port++) {
>            if ( IO::Socket::INET->new(
>                 PeerAddr   => $target,
>                 PeerPort   => $port,
>                 Proto      => 'tcp',
>                 Timeout         => 1)) {
>                 print "Port $port is open\n";
>            }
>      }
>      print "\nPort scan complete\n";
>      exit;
> }
>
>
> Can anyone suggest why I am getting an error and how I can fix it?

We can try, once you give us a place to start.  I already had to do way to
much of your work to determine where the errors arose.  FWIW, without strict
compilation, there were no errors.
The messages you got were warnings, telling you that your code was probably
not working [ie that variables were being used without being assigned a
value.
That is a good indication that you should turn strict back on to help find
where the problems are coming from

Joseph


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to