lvalue Funktionen

lvalue Funktionen

am 09.06.2006 11:17:42 von Ferry Bolhar

Hallo,

mit

sub myfunc : lvalue {
....
}

kann ich eine Funktion als "lvalue" deklarieren, dh., ich kann sie
in Folge auch mit

myfunc() = ..;

aufrufen.

Wie kann ich innerhalb der Funktion feststellen, ob sie nun
im lvalue-Context oder als "normale" Funktion aufgerufen
wurde?

Schöne Grüße aus Wien,

Ferry

--
Ing. Ferry Bolhar
Municipality of Vienna, Department 14
A-1010 Vienna / AUSTRIA
E-mail: bol@adv.magwien.gv.at

Re: lvalue Funktionen

am 09.06.2006 11:52:09 von Frank Seitz

Ferry Bolhar wrote:
> Hallo,
>
> mit
>
> sub myfunc : lvalue {
> ...
> }
>
> kann ich eine Funktion als "lvalue" deklarieren, dh., ich kann sie
> in Folge auch mit
>
> myfunc() = ..;
>
> aufrufen.
>
> Wie kann ich innerhalb der Funktion feststellen, ob sie nun
> im lvalue-Context oder als "normale" Funktion aufgerufen
> wurde?

Ich kannte das nicht, habe mir das interessehalber aber mal durchgelesen.
Wenn ich es richtig verstehe, hast Du keinen Zugriff auf den
zugewiesenen Wert, sondern die Zuweisung findet transparent nach
dem Aufruf auf dem gelieferten Lvalue statt.
Da stellt sich mir die Frage, was Du mit der gesuchten
Information anfangen willst, die nützt Dir ja eigentlich nichts.
Ich vermute, es ist nicht vorgesehen, dass man sie abfragen kann.

Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel

Re: lvalue Funktionen

am 09.06.2006 16:58:27 von Ferry Bolhar

Frank Seitz:

> Da stellt sich mir die Frage, was Du mit der gesuchten
> Information anfangen willst, die nützt Dir ja eigentlich nichts.
> Ich vermute, es ist nicht vorgesehen, dass man sie abfragen kann.

Ich hätte einen Fall, ähnlich wie "keys", wo also, in Abhängigkeit
von der Verwendung als lvalue oder normal, unterschiedliche
Funktionalität bereitgestellt werden soll. Im Prinzip habe ich
eine Funktion

$text = next_vtx_page($docid);

die, in einer Schleife aufgerufen, für jeden Aufruf die folgende
Seite eines VTX-Dokumentes (ist der Vorläufer eines w4-Systems)
zurückliefert. Dabei wird intern ein Index verwaltet, der bei
jedem Aufruf weitergesetzt wird und dafür sorgt, dass immer
die nächste Seite des Dokumentes zurückgeliefert wird. Mit

next_vtx_page($docid) = ;

möchte ich nun den interen Index des gegebenen Dokumentes
auf den angegeben Wert setzen und die Seitenausgabe von
dort beginnen können.

Natürlich ließe sich das auch mit einer eigenen Funktion
zum Setzen des Indexes machen, aber da der Index nur in
Zusammenhang mit next_vtx_page verwendet wird und Perl
ja lvalue-Funktionen unterstützt, dachte ich eben, dass es auch
so gehen müsste.

Das Problem ist eben nur, dass ich innerhalb von next_vtx_page
nicht feststellen kann, wie ich aufgerufen wurde.

LG, Ferry

--
Ing. Ferry Bolhar
Municipality of Vienna, Department 14
A-1010 Vienna / AUSTRIA
E-mail: bol@adv.magwien.gv.at

Re: lvalue Funktionen

am 09.06.2006 21:59:49 von Slaven Rezic

"Ferry Bolhar" writes:

> Hallo,
>
> mit
>
> sub myfunc : lvalue {
> ...
> }
>
> kann ich eine Funktion als "lvalue" deklarieren, dh., ich kann sie
> in Folge auch mit
>
> myfunc() = ..;
>
> aufrufen.
>
> Wie kann ich innerhalb der Funktion feststellen, ob sie nun
> im lvalue-Context oder als "normale" Funktion aufgerufen
> wurde?
>

perldoc Want

--
Slaven Rezic - slaven rezic de

tkrevdiff - graphical display of diffs between revisions (RCS, CVS or SVN)
http://ptktools.sourceforge.net/#tkrevdiff

Re: lvalue Funktionen

am 10.06.2006 10:23:02 von Daniel Fischer

Slaven Rezic!

> perldoc Want

Kommt das nicht erst mit perl6?


Gruss
Daniel

Re: lvalue Funktionen

am 10.06.2006 18:54:11 von Slaven Rezic

Daniel Fischer writes:

> Slaven Rezic!
>
> > perldoc Want
>
> Kommt das nicht erst mit perl6?
>

Das gibt es schon als CPAN-Modul für perl5.

--
Slaven Rezic - slaven rezic de
BBBike - route planner for cyclists in Berlin
WWW version: http://www.bbbike.de
Perl/Tk version for Unix and Windows: http://bbbike.sourceforge.net

Re: lvalue Funktionen

am 12.06.2006 11:24:04 von Ferry Bolhar

Slaven Rezic:

>>> perldoc Want
> >
> > Kommt das nicht erst mit perl6?
>
> Das gibt es schon als CPAN-Modul für perl5.

Aber nicht in der Standard-Distribution (zumindest noch
nicht in 5.8.7), deswegen hilft der obige Befehl nicht viel,
bevor man es nicht installiert hat.

Aber danke für den Hinweis, das sehe ich mir näher an!

Schöne Grüße aus Wien,

Ferry

--
Ing. Ferry Bolhar
Municipality of Vienna, Department 14
A-1010 Vienna / AUSTRIA
E-mail: bol@adv.magwien.gv.at

Re: lvalue Funktionen

am 12.06.2006 12:05:58 von Frank Seitz

Ferry Bolhar wrote:
> Frank Seitz:
>>
>>Da stellt sich mir die Frage, was Du mit der gesuchten
>>Information anfangen willst, die nützt Dir ja eigentlich nichts.
>>Ich vermute, es ist nicht vorgesehen, dass man sie abfragen kann.
>
> Ich hätte einen Fall, ähnlich wie "keys", wo also, in Abhängigkeit
> von der Verwendung als lvalue oder normal, unterschiedliche
> Funktionalität bereitgestellt werden soll. Im Prinzip habe ich
> eine Funktion
>
> $text = next_vtx_page($docid);
>
> die, in einer Schleife aufgerufen, für jeden Aufruf die folgende
> Seite eines VTX-Dokumentes (ist der Vorläufer eines w4-Systems)
> zurückliefert. Dabei wird intern ein Index verwaltet, der bei
> jedem Aufruf weitergesetzt wird und dafür sorgt, dass immer
> die nächste Seite des Dokumentes zurückgeliefert wird. Mit
>
> next_vtx_page($docid) = ;
>
> möchte ich nun den interen Index des gegebenen Dokumentes
> auf den angegeben Wert setzen und die Seitenausgabe von
> dort beginnen können.

Wenn Du in der Subroutine dazu den Wert kennen musst, geht
das auf dem Wege nicht, wenn ich es richtig verstanden habe.

> Natürlich ließe sich das auch mit einer eigenen Funktion
> zum Setzen des Indexes machen,

Wenn das eine andere Funktionalität ist, ist eine Trennung
in zwei Subroutines ohnehin vorzuziehen. Wenn nicht, ist
ein optionaler zweiter Parameter auch eine Möglichkeit.

> aber da der Index nur in
> Zusammenhang mit next_vtx_page verwendet wird und Perl
> ja lvalue-Funktionen unterstützt, dachte ich eben, dass es auch
> so gehen müsste.

Mir erscheint dieses Feature exotisch und da es als experimentell
gekennzeichnet ist, würde ich es bestimmt nicht für etwas einsetzen,
was sich auch auf normalem Wege erreichen lässt.

Ich könnte mir vorstellen, dass es zur Definition von
Accessor-Methoden wie in Ruby (Objektattribute werden durch Methoden
gekapselt, an die auch zugewiesen werden kann) nützlich sein könnte.
Aber sonst?

Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel