2012-04-12 76 views
0

我有這個簡單的基類(模塊):從IO繼承::下載

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加載...我用的構造函數(新)創建一個新的對象,等等。但是當我關閉它,它與下面的錯誤死亡:

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

我真的不能弄明白爲什麼。

回答

2

不是讓IO :: File創建對象,而是創建它,並且完全錯誤地創建它。你甚至沒有使用正確的變量類型(hash vs glob)。讓IO :: File創建對象。

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

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

+0

是的,我願意。相當一段時間,我只是沒有寫OO perl( - :謝謝 – snoofkin 2012-04-12 18:09:40