in reply to Re: map question
in thread map question

Is this suppose to be print ONLY if length of it is greater than 15 ? Currently, it's not printing anything..
What I want is after going through some sort of code,
it will take out all the \s+ and put them together
abc abc1 abc2 abc3
as

abcabc1abc2abc3

and then see if it's length is greater than 15
and print ONLY if length is greater than 15, if not, discard
print grep {length > 15} map {s/\s+//g; "$_\n"} @fields;
Here is my entire code
#!/usr/bin/perl -w use strict; my $ncb = $/; my $cbn = $"; $/ = "\n\n"; $" = "\n"; my $yahoo = shift @ARGV; open FH, "$yahoo" or die "can't open $!"; my $callid; my $sipm; my %data1 = (); my $count = 0; my @fields1; while (<FH>) { chomp; if (m/###/) { next; } unless (m{(?:^\bSIP\/2\.0 \b)?(\d\d\d|^[A-Z]{3,6} ).*(Call-ID: +[\S]{25,80})[^ ]+: .*}s) { $count++; next; } ($sipm,$callid) = ($1,$2); push (@{$data1{$callid}}, $sipm); } close FH; $/ = $ncb; $" = $cbn; print "There were $count which could not detect\n"; #foreach $callid (sort keys %data1) { # my @fields = @{$data1{$callid}}; # foreach (@fields) { # print map { # ( my $x = $_ ) =~ s/\s+//g; # length( $x ) < 15 ? () : $x; # } @{ $data1{ $callid } }; # } #} foreach $callid (sort keys %data1) { my @fields = @{$data1{$callid}}; print grep {length > 15} map {s/\s+//g; "$_\n"} @fields; }

Replies are listed 'Best First'.
Re^3: map question
by GrandFather (Saint) on Jul 29, 2007 at 03:46 UTC

    If you are not seeing the data you expect being printed then the data is probably no as you expect. Try using Data::Dump::Streamer to examine the data structure that you actually have.


    DWIM is Perl's answer to Gödel