The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

# From RT #1861

use strict;
use Symbol;
use Test::More tests => 4;

my $file = "showbugtest.dat";
my @input_lines = <DATA>;

open F, ">$file" || die "Can't open test data file '$file' $!";
print F @input_lines;
close F;

my $fh = gensym;

is my_parser::parse(@input_lines), 3, "GOT: 3 lines"; 
is my_parser::parse($file), 3, "GOT: 3 lines";
is my_parser::parse($fh), undef, "No output because of bad file handle";
is my_parser::parse($file), 3, "GOT: 3 lines"; 

unlink $file;

package my_parser;

use strict;
use Parse::Lex;
use Symbol;

my $lexer;
BEGIN { 
	$lexer = Parse::Lex->new( EOR => '\n', LINE => '.*' );

	# Avoid Name "my_parser::EOR" used only once
	my @dummy = ($my_parser::EOR, $my_parser::LINE);
};

sub parse {
  my $file = shift;
  my $fh;
  my $should_close = 0;
  if ( @_ ) { 					# more than one argument -> list of strings
	$lexer->from($file, @_);	# had shifted first string to $file
  }
  elsif ( ref $file eq "GLOB" ) {
    $fh = $file;
    fileno( $fh ) or return undef;
	$lexer->from($fh);
  }
  else {
    $fh = gensym;
    open $fh, $file or die "Can't open file '$file' for import. Error: $!";
    $should_close = 1;
	$lexer->from($fh);
  }

  my $token;
  my $line_cnt = 0;
  
  while ( $lexer->nextis(\$token) ) {
    ++ $line_cnt if $token->name eq "EOR";
  }
  close $fh if $should_close; # take this out and it MAY work
#  print "GOT: $line_cnt lines\n";
  return $line_cnt;
}


__END__
1,one
2,two
3,three