Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical
 
PerlMonks  

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

by noviceuser (Novice)
on Jun 16, 2021 at 08:57 UTC ( #11133914=note: print w/replies, xml ) Need Help??


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

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

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

Replies are listed 'Best First'.
Re^5: how to strip spaces, commas or new lines from an array
by hippo (Bishop) on Jun 16, 2021 at 09:07 UTC

    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:  <%-{-{-{-<

Re^5: how to ignore spaces, commad or new line of an array when comparing
by dbuckhal (Hermit) on Jun 16, 2021 at 14:36 UTC

    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://11133914]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others having an uproarious good time at the Monastery: (None)
    As of 2021-10-16 05:54 GMT
    Sections?
    Information?
    Find Nodes?
    Leftovers?
      Voting Booth?
      My first memorable Perl project was:







      Results (69 votes). Check out past polls.

      Notices?