0

我有这个简单的基类(模块):

package XMSP::File;
use parent 'IO::File';

sub new {
    my ($self,@args) = @_;
    my $object = {};

    bless($object,$self);
    $object->SUPER::new(@args);

    return $object;
}

sub open {
    my ($self,@args) = @_;
    $self->SUPER::open(@args);
}

sub close {
    my ($self,@args) = @_;
    $self->SUPER::close(@args);
}
1;

脚本:

#!/usr/bin/env perl
use strict;
use warnings;
use XMSP::File;

my $file = XMSP::File->new("< $0");

if (defined $file) {
    print "First Ok\n";
    $file->close();
}

$file->open("< file");

if (defined $file) {
    print "Second Ok\n";
}

在我的脚本上,我使用...加载它use...我使用 ctor (new) 创建一个新对象等,但是当我关闭它时,它会因以下错误而死:

First Ok
Not a GLOB reference at /usr/lib/perl/5.10/IO/Handle.pm line 115.

我真的不知道为什么。

4

1 回答 1

2

不是让 IO::File 创建对象,而是创建它,然后创建它是完全错误的。您甚至没有使用正确的变量类型(散列 vs glob)。让 IO::File 创建对象。

sub new {
    my ($class, @args) = @_;
    my $self = $class->SUPER::new(@args);
    return $self;
}

请注意,此方法是完全多余的。我想你打算在其中做额外的工作。

于 2012-04-12T18:07:27.920 回答