2012-04-12 13 views
0

Ich habe diese einfache Basisklasse (Modul) Datei:von IO Vererben ::

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; 

Script:

#!/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"; 
} 

Auf meinem Skript, das ich es use mit laden ... verwende ich den Ctor (neu), ein neues Objekt zu erstellen, etc., aber wenn ich es schließen, stirbt es mit dem folgenden Fehler:

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

ich nicht wirklich herausfinden, warum kann.

Antwort

2

Anstatt IO :: Datei das Objekt erstellen lassen, erstellen Sie es, und Sie erstellen es vollständig falsch. Sie haben nicht einmal den richtigen Variablentyp (Hash vs Glob) verwendet. Lassen Sie IO :: File das Objekt erstellen.

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

anzumerken, dass dieses Verfahren vollständig redundant ist. Ich nehme an, Sie beabsichtigen, zusätzliche Arbeit darin zu tun.

+0

Ja, das tue ich. Ich habe OO Perl schon lange nicht mehr geschrieben (-: Danke – snoofkin