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

Re^3: how to ignore spaces, commas or new line of an array when comparing

by hippo (Bishop)
on Jun 16, 2021 at 08:48 UTC ( [id://11133913]=note: print w/replies, xml ) Need Help??


in reply to Re^2: how to ignore spaces, commad or new line of an array when comparing
in thread how to ignore spaces, commas or new line of an array when comparing

Hmmm. Is your real question then "How do I clean whitespace from data read from a file?" or something like that? Or do you really want one array with whitespace and one without?


🦛

  • Comment on Re^3: how to ignore spaces, commas or new line of an array when comparing

Replies are listed 'Best First'.
Re^4: how to ignore spaces, commad or new line of an array when comparing
by noviceuser (Acolyte) on Jun 16, 2021 at 08:57 UTC

    yes..i want to clean whitespaces/new line or any speacial character from array2 and make it comparable to array1

      In that case:

      use strict; use warnings; use Test::More tests => 1; my @array1 = ('foo', 'bar'); my @array2 = (" foo\n", ',bar,'); my @clean = map { s/[\s,]//mg; $_ } @array2; is_deeply \@clean, \@array1;

      Alter the map to your precise requirements. See also How to ask better questions using Test::More and sample data for future reference.

      Addendum: if you don't want or need to keep your "dirty" array you could modify it in-place instead:

      use strict; use warnings; use Test::More tests => 1; my @array1 = ('foo', 'bar'); my @array2 = (" foo\n", ',bar,'); s/[\s,]//mg for @array2; is_deeply \@array2, \@array1;

      Addendum 2: Note the reply by AnomalousMonk (++) who correctly points out that the map already modifies @array2 and that using /r will prevent that.


      🦛

        ... if you don't want or need to keep your "dirty" array you could modify it in-place ...

        noviceuser:   Note that because map aliases via $_ (on which s/// operates by default), the dirty array is already being modified in place:

        Win8 Strawberry 5.8.9.5 (32) Wed 06/16/2021 10:11:33 C:\@Work\Perl\monks >perl use strict; use warnings; use Test::More tests => 2; 1..2 my @array1 = ('foo', 'bar'); my @array2 = (" foo\n", ',bar,'); my @clean = map { s/[\s,]//mg; $_ } @array2; is_deeply \@clean, \@array1, "new, cleaned array"; is_deeply \@array2, \@array1, "dirty array modified in place"; ^Z ok 1 - new, cleaned array ok 2 - dirty array modified in place
        With Perl version 5.14 and after, one can use the /r modifier with s/// (and tr/// y///) to avoid this modify-in-place behavior when operating on the default $_ alias. See s/// tr/// y/// under Regexp Quote-Like Operators in perlop. (Update: Correction: the tr/// y/// operators are actually discussed in the Quote-Like Operators section of perlop.)


        Give a man a fish:  <%-{-{-{-<

      I am not familiar with Array::Compare, and all of its options, but how about utilizing a "chomp and slurp mode" combination to flatten the file contents? Then the rest of the array prep might look like this:

      1. chomp and slurp
      2. filter out special characters
      3. split and push

      just a quick thought... hope it helps.

      Info: Perl Maven Slurp Mode

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others having an uproarious good time at the Monastery: (6)
As of 2024-04-18 10:17 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found