Some will say this is a simple minded solution, and maybe it is, but
FWIW here's my contribution. This decomposes your data into a data
structure in memory. It's dynamic in the sense that it doesn't matter
how many records you have or where the @'s are, as long as you have
only two levels. All you have to do then is print it out. I have used
Dumper simply because I'm to lazy to finish it.
CODE:
use strict;
use warnings;
use Data:

umper;
while (<DATA>)
{
my @rest = split /\t/;
my $num = @rest;
for (my $i = 0; $i < $num; $i++)
{
if ($rest[$i] =~ /@/)
{
$rest[$i] = [split /@/, $rest[$i]];
}
print qq(\t$rest[$i]\n);
}
print "\nData Structure via Dumper is:\n";
print Dumper(@rest);
}
exit(0);
__DATA__
A B1@B2 C d e f N1@N2@N3
OUTPUT:
C:\PerlLearn>perl multiple.plx
A
ARRAY(0x23534

C
d
e
f
ARRAY(0x182471c)
Data Structure via Dumper is:
$VAR1 = 'A';
$VAR2 = [
'B1',
'B2'
];
$VAR3 = 'C';
$VAR4 = 'd';
$VAR5 = 'e';
$VAR6 = 'f';
$VAR7 = [
'N1',
'N2',
'N3
'
];
C:\PerlLearn>