I'm working on making a BED file but I'm having a problem splitting a variable to get the individual id.
Here are the data
fam_scz_uktr_eur_omni*UK1090_0_pca|PT-BHLS chr15 20301669 ...
This is my script (I escaped!)
if( $id =~ m/\|/g){
@tempID = split "\|", $id;
$id = pop(@tempID);
}
...
unless($id =~ m/FID.IID/ || $id =~ m/arrayId/ || $id =~ m/sampleId/){
$orphan{$id}=$line;
}
This is the output of the orphan hash
KEY VALUE
S fam_scz_uktr_eur_omni*UK1090_0_pca|PT-BHLS chr15 20301669 ....
It's returning the last character. What gives!?
Am I missing something here? Any help is appreciated :D
2 answers
In the split function use /\|/ rather than the quotes. It worked for me
Just to expand a little on the answer by cts. Debug this problem by inspecting the variable @tempID.
print "@tempID\n";
Here it is when split uses double quotes:
f a m _ s c z _ u k t r _ e u r _ o m n i * U K 1 0 9 0 _ 0 _ p c a | P T - B H L S
And when you use single quotes, or the regular expression suggested by cts:
fam_scz_uktr_eur_omni*UK1090_0_pca PT-BHLS
What's happening is that when you use double-quotes, split looks for the literal string \|, not the escaped pipe. It does not find it and so returns the result "no character" which results in splitting between the characters.
Log in to answer this question.
Quick question: What are you expecting out of the pop operation? If you're sure the '|' is used only once in a line, why not just take
$tempId[1]?