Wow! Most excellent!
Just a small addition, I think there is a missing ")" which I added below..right there at the tail-end ")/g". I also changed this to put the tokens directly into an array without the need for "while".
#!/usr/bin/perl -w
use strict;
my $line = "2006-01-01,Kims,Watson,406,560(centrifuge, refrig.),569,60
+7(dark room),210-211,101(ultracentrifuge),104-105(crystal growth room
+s),660(centrifuge, refrig.)";
my @tokens = $line =~ m/([^,(]+(?:\([^)]*\))?)/g;
foreach my $token (@tokens)
{
print "$token\n";
}
__END__
Prints:
2006-01-01
Kims
Watson
406
560(centrifuge, refrig.)
569
607(dark room)
210-211
101(ultracentrifuge)
104-105(crystal growth rooms)
660(centrifuge, refrig.)
Update: the only other small refinement would be to add () around the match-global to make it super clear that this is list context:
my @tokens = ($line =~ m/([^,(]+(?:\([^)]*\))?)/g);