in reply to map question

next won't do very much for you outside of a loop. Using tools such as map with an implicit loop do not allow the use of next. However you can combine map and grep to achieve what you want:

use strict; use warnings; my @fields = ( 'abc abc1 abc2', 'abc abc1 abc3 abc5', 'abc2 abc3 abc5 abc7 abc9 abc10', 'abc1 abc2 abc3 abc4 abc5 abc6', ); print grep {length > 15} map {s/\s+//g; "$_\n"} @fields;

Prints:

abcabc1abc3abc5 abc2abc3abc5abc7abc9abc10 abc1abc2abc3abc4abc5abc6

with the further advantage that you don't have to maintain the same piece of code in multiple places.


DWIM is Perl's answer to Gödel

Replies are listed 'Best First'.
Re^2: map question
by convenientstore (Pilgrim) on Jul 29, 2007 at 01:52 UTC
    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; }

      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