split takes a regex as its first argument. The | characters are thus being interpreted as regex alternation characters. This works:
use strict; my ($pointer, $id, $title); while (<DATA>) { chomp; ($pointer, $id, $title) = split(/\|\|/); print "pointer=$pointer, id=$id, title=$title\n" } __DATA__ 23||record1||The Title 1054||record2||The Title #2 2023||record3||The Title #3
But note that I used the / quotes -- not ". This is one I don't quite understand. Using " you need to escape with two backslashes; presumably because there's an extra interpolation pass or something? In other words, why do I need this using double quotes?
$pointer, $id, $title) = split("\\|\\|");
I should know this but don't off the top of my head. Looking it up now ...
Without escaping the | characters you're telling split to split on single characters. The result I get when I print using your example is the first three characters of each line as expected.
In reply to Re: Wierd funky problems with split
by steves
in thread Wierd funky problems with split
by toonski
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |