Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?
 
PerlMonks  

Re^2: array with s///g command

by wind (Priest)
on Jul 30, 2007 at 00:14 UTC ( [id://629459]=note: print w/replies, xml ) Need Help??


in reply to Re: array with s///g command
in thread array with s///g command

Slightly cleaner:
my @array2 = @array1; s/\s+//g for (@array2);
Or in a single statement:
my @array2 = map {(my $x = $_) =~ s/\s+//g; $x} @array1;
The main concern you must have when dealing with map and a regex is not destructing the original array unless you truly intend to. $_ is an alias to each element of the source array, so any modification of it modifies the original array. To avoid this we assign to a temporary lexical in the above map block. And then finally make sure to return the actual variable and not a count of the number of substitutions.

Personally, I'd probably just stick with your original code, as I kind of doubt that you truly need a second array with these crunched values. Instead simply add the "crunching" as part of the loop for whatever other processing that you intend to be doing. Whatever that may be.

- Miller

Replies are listed 'Best First'.
Re^3: array with s///g command
by convenientstore (Pilgrim) on Jul 30, 2007 at 00:36 UTC
    thanks guys, it's working. I still dont' understand map too well(along with many other things).. can someone show me a URL that has map tutorial better than http://perldoc.perl.org/functions/map.html ?? Their explanation on how to mix it in with other does not make much sense to me.

      You should take a bit of time to browse through the Tutorials section here. Of immediate interest you will find Map: The Basics there and the List Processing, Filtering, and Sorting sub-section in general is likely to be of value. But don't stop there - you will find lots of good stuff if you poke around the many corners and alcoves of the Tutorials section.


      DWIM is Perl's answer to Gödel
        thank you. I am definitely going through them(tutorials)
        Here is my working code to date,

        I plan to add one sub to do more with the data but this is great
        that it's working this far. But I am gonna go back to tutorials to read more on everything that I am lacking to
        program .. but you guys are great!!
        #!/usr/bin/perl -w use strict; use diagnostics; 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 $size = 15; 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"; HANA: foreach $callid (sort keys %data1) { my @fields = @{$data1{$callid}}; my @fields1 = @fields; @fields1 = map { s/\s//g; $_ } @fields1; if ("$size" > ($#fields1 + 1)) { next HANA; } else { print @fields1; } print "\n"; }
Re^3: array with s///g command
by Anno (Deacon) on Jul 30, 2007 at 09:48 UTC
    You can simply join the statements
    my @array2 = @array1; s/\s+//g for (@array2);
    into one:
    tr/ //d for my @array2 = @array1;
    The tr/// here only treats blanks instead of general white space, but that's easily changed if necessary.

    Anno

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others contemplating the Monastery: (4)
As of 2024-04-24 18:44 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found