如何在与SO q 2621225中相同的Perl文件中调用包

时间:2015-12-09 19:11:49

标签: perl oop packages

我正在通过 Higher Order Perl 工作,并希望尝试执行其中的一些代码,在本例中为FlatDB.pm

我试图模拟this question (2621225)答案中概述的调用方法,但它对我不起作用。即:

## HOP Chapter 4 section 3.4, p.140
my $FIELDSEP = qr/:/; 

package FlatDB; 

sub new {
  my $class = shift;
  my $file = shift;
  open my $fh, "< $file" or return;
  chomp(my $schema = <$fh>);
  my @field = split $FIELDSEP, $schema;
  my %fieldnum = map { uc $field[$_] => $_ } (0..$#field);
  print "\nfieldnum=",%fieldnum;
  bless { FH => $fh, FIELDS => \@field, FIELDNUM => \%fieldnum,
      FIELDSEP => $FIELDSEP }   => $class;
}
# More subs here - snipped

我尝试运行该程序包时添加的内容:

package main;
print "\nat 89";
$obj= FlatDB->new("FlatDB","SampleDB.txt"); 
print "\nat 91"; 

89&amp; 91执行,但“新”子程序中的打印不执行。如果我将它从包中拉出来,那么'new'子程序是有效的,所以问题必须在于我如何调用它。

我担心这很简单,但我看不到它。

1 个答案:

答案 0 :(得分:1)

方法可以在不执行print语句的情况下退出的唯一方法是通过行

open my $fh, "< $file" or return;

所以我认为open由于某种原因失败了。用

替换该行
open my $fh, '<', $file or die qq{Unable to open "$file" for input: $!};

你会看到失败的原因