Re: Re: Parsing, tokens and strings
by Anonymous Monk on Oct 17, 2001 at 20:59 UTC
|
According to my understanding of the original poster's goal, this is NOT the
solution to his problem. Contrary to the poster's statement that he
needs to make split "quote aware", I think he really wants to make
it quote UN-aware, so that he can treat quotes as another
delimiter character (this is what the sample assignment
statement he offered accomplishes, of the form @array = ( "A", "B" )
being the resulting effect, for an original line of the form A "B").
Unless I'm misunderstanding his intentions, the proper
solution would then be something akin to: my @words = split /[\s"']+/ (assuming it's not important to ensure balanced use of quotes)
Tim Maher
tim@consultix-inc.com
| [reply] [d/l] [select] |
|
|
| [reply] |
|
|
Oops! Now I see that the original poster's sample assignment was not as simple as I had shown, because he
had "B C" where I had "B" (multiple quoted words being treated as a single token, vs. my idea of a single word).
This being the case, my suggestion of changing split's delimiters will obviously not work, so "nevermind"! 8-}
Tim Maher
tim@consultix-inc.com
| [reply] [d/l] |
Re: Parsing, tokens and strings
by tedv (Pilgrim) on Oct 17, 2001 at 20:48 UTC
|
Incidently, for solutions like this, is there an easy way
of adding support for escaped quotes like \"?
-Ted | [reply] [d/l] |
|
|
Yes, let someone else write and debug the code.
use Text::ParseWords;
my @words = shellwords($_);
{grin}
-- Randal L. Schwartz, Perl hacker | [reply] [d/l] |
Re: Re: Parsing, tokens and strings
by JPaul (Hermit) on Oct 17, 2001 at 20:21 UTC
|
| [reply] |
|
|
Hmm. Not as impressive when you realize I left the quote marks on. {grin} A simple fix:
my @words = grep defined, /"([^"]*)"|'([^']*)'|(\S+)/g;
-- Randal L. Schwartz, Perl hacker | [reply] [d/l] |
|
|
Heh, I thought the quotes being left in the @array was a "feature", so I:
foreach (@array) { s/"//g; s/'//g; }
Thanks all for your help,
JP Hindin,
-- Alexander Widdlemouse undid his bellybutton and his bum dropped off -- | [reply] [d/l] |
|
|
$_ = q{we "can't" 'say "this"?'};
-- Randal L. Schwartz, Perl hacker | [reply] [d/l] |
|
|
somewhat silly to belabor the point, but why not just:
tr/'"//d for @array;
-Blake
| [reply] [d/l] |
Re: Re: Parsing, tokens and strings
by tommyw (Hermit) on Oct 17, 2001 at 20:27 UTC
|
Yup, that'll be a talented regex hacker... | [reply] |