http://www.perlmonks.org?node_id=11133912


in reply to Re: 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

in @array1, the contents are being pushed and in @array2, the contents are being read from a file and stored in the @array2

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

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

    How does that reply address "show precisely how your arrays are created" (see I know what I mean. Why don't you?)? Perhaps you intended to write something like:

    use strict; use warnings; my $fStr = <<FSTR; abc xyz FSTR open my $inFile, '<', \$fStr; my @array2 = <$inFile>; my @array1 = ('abc ', 'xyz');
    Optimising for fewest key strokes only makes sense transmitting to Pluto or beyond
Re^3: how to ignore spaces, commas or new line of an array when comparing
by hippo (Chancellor) on Jun 16, 2021 at 08:48 UTC

    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?


    🦛

      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.


        🦛

        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