我正在通过 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'子程序是有效的,所以问题必须在于我如何调用它。
我担心这很简单,但我看不到它。
答案 0 :(得分:1)
方法可以在不执行print
语句的情况下退出的唯一方法是通过行
open my $fh, "< $file" or return;
所以我认为open
由于某种原因失败了。用
open my $fh, '<', $file or die qq{Unable to open "$file" for input: $!};
你会看到失败的原因