Diamant-Operator mit $ref->{handle} benutzen?

Diamant-Operator mit $ref->{handle} benutzen?

am 01.06.2006 15:00:39 von fuzz

Kann ich den Diamant-Operator mit einer Reference benutzen? Wie sieht
die Syntax dazu aus? Folgendes Minimalbeispiel steigt mit einem 'syntax
error at bubu.pl line 8, near "< ($ref->{handle"' aus bzw. läßt sich
nicht mal kompilieren.

#!/usr/bin/perl

use strict;
use warnings;

my $ref = { handle => IO::File->new('/etc/hosts') };

while (<$ref->{handle}>)
{
print;
}

Geht das überhaupt oder ist das ein Feature des Diamant-Operator?

--
So long... Fuzz

Re: Diamant-Operator mit $ref->{handle} benutzen?

am 01.06.2006 15:53:47 von Mirco Wahab

Thus spoke Erik Wasser (on 2006-06-01 15:00):

> my $ref = { handle => IO::File->new('/etc/hosts') };
>
> while (<$ref->{handle}>)
> {
> print;
> }

scheint nicht zu gehen, versuch mal:

#!/usr/bin/perl

use strict;
use warnings;
use IO::File;

my $ref = { handle => IO::File->new('test.txt') };

my $deref = $ref->{handle};
while ( <$deref> ) {
print;
}


Viele Grüße

Mirco

Re: Diamant-Operator mit $ref->{handle} benutzen?

am 03.06.2006 17:12:35 von fuzz

Mirco Wahab wrote:

> scheint nicht zu gehen, versuch mal:

Ach verdammt, das hätte ich dazu schreiben sollen. Der Workaround ist
mir bekannt. Ich wollte nur wissen, ob das Problem bei mir oder bei
Perl liegt.

Der Workaround funktioniert natürlich. B-)

--
So long... Fuzz

Re: Diamant-Operator mit $ref->{handle} benutzen?

am 03.06.2006 19:52:12 von Frank Wiegand

Erik Wasser schrieb:

> while (<$ref->{handle}>)
>
> Geht das überhaupt oder ist das ein Feature des Diamant-Operator?

Zumindest bei 5.8.7 geht das nicht, weil der Parser das Konstrukt <>
nicht "sauber" parst. Stattdessen liest er den Inhalt bis zum ersten '>'
aus, und das ist bei dir der Dereferenzierungspfeil (siehe toke.c,
Funktion S_scan_inputsymbol).


Frank