Beefy Boxes and Bandwidth Generously Provided by pair Networks
Don't ask to ask, just ask
 
PerlMonks  

Re^2: Regular Expressions question

by 2teez (Priest)
on Oct 29, 2012 at 21:02 UTC ( #1001426=note: print w/ replies, xml ) Need Help??


in reply to Re: Regular Expressions question
in thread Regular Expressions question

Assumption:

  • the data after __DATA__, were what you have in your array variable named @check
  • You have only T1 interface in your data

If true, then try this:
use warnings; use strict; my $host = ""; my $interface = ""; my $PRIList = ""; my $T1List = ""; my $T1Count = 0; my $PRICount = 0; my @check = grep { chomp $_; $_ } <DATA>; for (@check) { if (m{([0-9]/[0-9]/[0-9])$}) { $T1Count++; $interface = $1; $T1List .= $interface . "\n"; } elsif (m{pri-group}) { $PRICount++; $PRIList .= $interface . "\n"; } } if ( $T1Count > 0 ) { print "T1 Controller Summary:\n\n"; print "$T1Count total T1 interfaces\n"; print $T1List; print "$PRICount total voice PRI(s)\n"; print $PRIList; } else { print "No T1 interfaces found"; } __DATA__ controller T1 0/0/0 framing esf linecode b8zs cablelength long 0db pri-group timeslots 1-24 controller T1 0/0/1 framing esf linecode b8zs cablelength long 0db controller T1 0/1/0 framing esf linecode b8zs cablelength long 0db controller T1 0/1/1 framing esf linecode b8zs cablelength long 0db
OUTPUT:
T1 Controller Summary: 4 total T1 interfaces 0/0/0 0/0/1 0/1/0 0/1/1 1 total voice PRI(s) 0/0/0
NOTE: Please, the script above apply to OP originally modified script starting from the for loop.
Hope, this helps.

If you tell me, I'll forget.
If you show me, I'll remember.
if you involve me, I'll understand.
--- Author unknown to me


Comment on Re^2: Regular Expressions question
Select or Download Code
Re^3: Regular Expressions question
by NetWallah (Abbot) on Oct 29, 2012 at 22:14 UTC
    Here is the equivalent code, done using OO:
    use warnings; use strict; my $host = ""; my (@T1_list, $current_T1); my @check = grep { chomp $_; $_ } <DATA>; for (@check) { if (m{([0-9]/[0-9]/[0-9])$}) { push @T1_list, $current_T1 = T1->new (INTERFACE=>$1) } elsif (m{pri-group}) { $current_T1->isPRI (1); } } if ( @T1_list ) { print "T1 Controller Summary:\n\n"; print scalar(@T1_list) . " total T1 interfaces\n"; $_->PrintName for @T1_list; print scalar(grep $_->isPRI(), @T1_list) ." total voice PRI(s)\n"; $_->PrintName for (grep $_->isPRI(), @T1_list); } else { print "No T1 interfaces found"; } { package T1; sub new{ my ($class, %att) = @_; return bless ( {PRI=>0, INTERFACE=>'', %att}, $class); } sub isPRI{ my ($self, $val) = @_; defined $val or return $self->{PRI}; $self->{PRI} = $val; } sub PrintName{ print $_[0]->{INTERFACE}, "\n"; } 1; } # End of T1

                 "By three methods we may learn wisdom: First, by reflection, which is noblest; Second, by imitation, which is easiest; and third by experience, which is the bitterest."           -Confucius

Re^3: Regular Expressions question
by Lotus1 (Chaplain) on Oct 30, 2012 at 03:24 UTC
    my @check = grep { chomp $_; $_ } <DATA>;

    Map should be used for this not grep. Consider the following.

    use warnings; use strict; my @check = grep { chomp $_; $_ } <DATA>; print ">>@check<<" __DATA__ line1 0 line3

    The output is:

    >>line1 line3<<

    Grep looks at the value the block returns and if true it returns $_. Map is used to do something to each element and pass along the result from each.

    To me it is clearer and simpler to do this:

    my @check = <DATA>; chomp @check;

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1001426]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others rifling through the Monastery: (5)
As of 2014-11-25 23:43 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    My preferred Perl binaries come from:














    Results (160 votes), past polls