in reply to splinting a line of text by comma

not recommended:

use strict; use warnings; sub globify { local $" = ","; my @commas = map qq{"$_"}, split /,/, $_; @commas == 1 ? qq{"$_"} : "{@commas}"; } while (<DATA>) { print glob ( join '|', map {globify} split /\|/ ,$_ ); } __DATA__ some text FOO | some text BAR | oh , no , commas | some text BAZ | som +e text QUX some text FOO | some text BAR | single | some text BAZ | some text QUX
some text FOO | some text BAR | oh | some text BAZ | some text QUX some text FOO | some text BAR | no | some text BAZ | some text QUX some text FOO | some text BAR | commas | some text BAZ | some text QUX some text FOO | some text BAR | single | some text BAZ | some text QUX

Cheers Rolf
(addicted to the Perl Programming Language :)
Wikisyntax for the Monastery FootballPerl is like chess, only without the dice

Replies are listed 'Best First'.
Re^2: splinting a line of text by comma
by tybalt89 (Monsignor) on Nov 23, 2018 at 04:20 UTC

    Still very much not recommended :)

    #!/usr/bin/perl # https://perlmonks.org/?node_id=1226189 use strict; use warnings; print glob qq("$_") =~ s/[^|\n]+/{$&}/gr while <DATA>; __DATA__ some text foo | some text BAR | oh , no , commas | some text BAZ | som +e text QUX some text Oof | some, text, BAR | some , text , BAZ | some text QUX some,text,FOO | some text BAR | one two | some , text , QUX

    Outputs:

    some text foo | some text BAR | oh | some text BAZ | some text QUX some text foo | some text BAR | no | some text BAZ | some text QUX some text foo | some text BAR | commas | some text BAZ | some text QUX some text Oof | some| some | some text QUX some text Oof | some| text | some text QUX some text Oof | some| BAZ | some text QUX some text Oof | text| some | some text QUX some text Oof | text| text | some text QUX some text Oof | text| BAZ | some text QUX some text Oof | BAR | some | some text QUX some text Oof | BAR | text | some text QUX some text Oof | BAR | BAZ | some text QUX some| some text BAR | one two | some some| some text BAR | one two | text some| some text BAR | one two | QUX text| some text BAR | one two | some text| some text BAR | one two | text text| some text BAR | one two | QUX FOO | some text BAR | one two | some FOO | some text BAR | one two | text FOO | some text BAR | one two | QUX
      yeah, better.

      I was already in bed half sleeping and was surprised about whitespace handling in glob.

      > Still very much not recommended :)

      Well if you find a way to escape curlies and other "wildcard characters" from the input... :)

      Cheers Rolf
      (addicted to the Perl Programming Language :)
      Wikisyntax for the Monastery FootballPerl is like chess, only without the dice

        if you find a way to escape curlies and other "wildcard characters"

        Sure, just move them out of the way :)

        #!/usr/bin/perl # https://perlmonks.org/?node_id=1226189 use strict; use warnings; #print glob qq("$_") =~ s/[^|\n]+/{$&}/gr while <DATA>; print map tr/\1-\7/{}[]"*?/r, glob +('"' . tr/{}[]"*?/\1-\7/r . '"') =~ s/[^|\n]+/{$&}/gr while <DATA>; __DATA__ some text foo | some text BAR | oh , no , commas | some text BAZ | som +e text QUX some,text,FOO{3} | some text BAR*? | "one" two | some , text , QUX

        Outputs:

        some text foo | some text BAR | oh | some text BAZ | some text QUX some text foo | some text BAR | no | some text BAZ | some text QUX some text foo | some text BAR | commas | some text BAZ | some text QUX some| some text BAR*? | "one" two | some some| some text BAR*? | "one" two | text some| some text BAR*? | "one" two | QUX text| some text BAR*? | "one" two | some text| some text BAR*? | "one" two | text text| some text BAR*? | "one" two | QUX FOO{3} | some text BAR*? | "one" two | some FOO{3} | some text BAR*? | "one" two | text FOO{3} | some text BAR*? | "one" two | QUX