the Shout.pm and demonstration code in pperl3 pp 385-389 elicit a rather 
obfuscated error message
"Can't use an undefined value as filehandle reference at ..."
under 5.6.1 (activeperl / cygwin). 

Following is a minimal illustration : 

#!perl -w

package Myfile;
use Carp;

require Tie::Handle;
@ISA = (Tie::Handle);

sub TIEHANDLE {
    use Symbol;
    my $class = shift;
    my $form = shift;
    open my $self, $form, @_            or croak "can't open $form@_: $!";
    return bless $self, $class;
}

sub CLOSE {
    my $self = shift;
    return close $self;
}

# ... more methods

package main;

tie(*FOO, Myfile::, "+>foo.tmp");
# ...
close FOO;

The problem lies in the "open" line 

    open my $self, $form, @_            or croak "can't open $form@_: $!";

in conjunction with the form 

 tie(*FOO, Myfile::, "+>foo.tmp");

Using the alternate form

 tie(*FOO, Myfile::, "+>", "foo.tmp");

does not elicit an error, but constraining client code this way is 
harly acceptable.

Changing the "open" line above into

    my $self;
    if (@_) {
        open $self, $form, @_           or croak "can't open $form@_: $!";
    } else {
        open $self, $form               or croak "can't open $form: $!";
    }

is better but beyond uglyness... There must exist a better way. 

Any taker ?

Also, the error message sounds a bit off-topic, which might indicate a 
problem in 'open' itself. However I don't know who this should be reported
to, nor how. Any pointers ?

TIA, 

--Christian

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to