On Thu, Jun 03, 1999 at 11:39:53AM -0500, Scott Prince wrote: > >Are you sure that the string ends with a newline when you split it? If > >your string is more like "a\tb\tc\t\t\t", then you _will_ get 3, because > >split() drops trailing null fields by default. > > Thats it! I was about to give it up. With MacPerl... > > $x = "a\tb\t\t\t\n"; > chomp $x; > @x = split (/\t/, $x); > foreach $f (@x) { $count++; } > print "$count\n\n"; > exit; > > I lose the empties, on Unix (example below) they are retained. Why should > this be different for Unix? What version of Perl?? perl5.002, the trailing null fields are dropped as expected. perl5.004_04, the trailing null fields are dropped as expected. perl5.005_02, the trailing null fields are dropped as expected. Even perl4.036 drops the trailing null fields. Here's a simple test case: #!/usr/local/bin/perl -w $_ = "first\tsecond\tthird\t\t\t"; @f = split(/\t/); if (@f == 3) { print "Ok.\n"; } else { print "Not ok.\n"; } > Should have posted the original code to begin with, but couldn't remember > which script it was from at the time... > > while (<TEMP>) > { > $in_count++; > $item_number++; > @item_num = ("$item_number"); > $line = $_; > chomp $line; > @fields = split (/\t/, $line); > $fields[3] = &format_date("month yyyy","$fields[3]","yyyymm"); > # checking only the first record > if (!($field_check)) > { > foreach $fc (@fields) { $number_of_fields_read++; } > if ($number_of_fields_read != $required_number_o_import_fields) > { > # error stuff... > } > $field_check = '1'; > } Where is the input coming from? Is it possible that your input file has Windows-style newlines - "\r\n"? chomp() would remove the "\n", but the "\r" would still be there, and split() would keep all the internal null fields. Ronald ===== Want to unsubscribe from this list? ===== Send mail with body "unsubscribe" to macperl-request@macperl.org