in reply to Re^3: Need help with a nested IF statement
in thread Need help with a nested IF statement

I am building on this script to capture more information and be able to spit out the information captured. Eventually this script will be used to change the ip address on a machine. So I built on the earlier version to see if I could capture Netmask and Broadcast address. I know there is something with my regex parameters because I am getting no output again. In the Else loop I think I am searching for inet, one or many data, space, netmask, data, space, broadcast, one or many data. But I am getting nothing. Having tagged each item I am looking for I wonder if I am not properly calling my tags in the print line.

Can someone take a look please?

use strict; use warnings; my $opsys = $^O; print "Hello, your operating system is: $opsys" . "\n"; if ($opsys =~ /linux/) { my $nics = qx |/sbin/ifconfig| or die("Can't get info from ifconfig: $!\n"); my @nics = split /(?<=\n)(?=\w)/, $nics; for (@nics){ my ($interface) = /^eth(\d)/ or next; my ($ip) = /\binet addr:([\d.]+)/ or next; print "Interface $interface has the IP Address of $ip\n"; } } else { my $nics = qx |ifconfig -a| or die("Can't get info from ifconfig: $!\n"); my @nics = split /(?<=\n)(?=\w)/, $nics; for (@nics){ my ($interface) = /^fjgi(\d)/ or next; my (@ip) = /\binet ([\d.]+)\snetmask ([\d]+)\sbroadcast ([\d.] ++)/ or next; print "Interface $interface has the IP Address of $ip[0]\n \tN +etmask: $ip[1]\n \tBroadcast $ip[2]\n"; } }

Here is another variation I have tried that is finding nothing

my ($ip, $mask, $bcast) = /\binet ([\d.]+)\snetmask ([\d]+)\sb +roadcast ([\d.]+)/ or next; print "Interface $interface has the IP Address of $ip\n \tNetm +ask: $mask\n \tBroadcast $bcast\n";

How do I print $_ to see what I am actually finding? I tried this and was getting a not declared error

Replies are listed 'Best First'.
Re^5: Need help with a nested IF statement
by ikegami (Patriarch) on Nov 02, 2009 at 20:30 UTC

    'f' is not a digit.

    By the way, \d works fine outside of character classes ([]).

      That was a great lesson in Regex. Thank you so much. I can see I have a long way to go before mastering this stuff. I expected to see a digit and for some reason the output was alpha as you pointed out. Thanks again.

      I also pickup on your second comment. I believe though have not yet tested you are telling my I can look for \d instead of the word "netmask" or "broadcast" So I will try this too.

        The second comment simply says that /...[\d].../ can be written as /...\d.../