Schrift
[thread]6417[/thread]

Was ist eigentlich ein LVALUE?: Seltsamer Rückgabewert von ref (Seite 2)

Leser: 2


<< |< 1 2 >| >> 19 Einträge, 2 Seiten
kabel
 2004-07-20 21:44
#84656 #84656
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
nehme das, was perl als lvalue versteht, net so ernst.
den begriff referenz gibts auch in mehreren ausführungen ;-)
-- stefan
murphy
 2004-07-20 21:50
#84657 #84657
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
[quote=betterworld,20.07.2004, 19:38][quote=murphy,20.07.2004, 19:35] ... Aber gab's nicht eine Möglichkeit, "Variablen" einzurichten, bei denen an Stelle einer Wertzuweisung irgendein Subroutinenaufruf erfolgt? ... [/quote]
Ja, mit tie().[/quote]
Hmm, wenn ich auf ein Skalar mit tie losgehe, und danach eine Referenz auf das Skalar erzeuge ist's immer noch eine ganz normale Skalarreferenz, kein LVALUE.
Das ist echt ein exotisches Biest, dieser LVALUE ;)
When C++ is your hammer, every problem looks like your thumb.
steffenw
 2004-07-21 00:15
#84658 #84658
User since
2003-08-15
692 Artikel
BenutzerIn
[Homepage] [default_avatar]
Ein gutes Beispiel für LVALUE ist
Code: (dl )
1
2
3
substr('String', 0, 2, 'D');
# oder als "LVALUE" oder "left Value" oder eben "linksstehender Wert"
substr('String', 0, 2) = 'D';
Beides funktioniert gleich.

Habe gerade noch etwas probiert:
Code: (dl )
1
2
3
4
5
6
7
8
use strict;
use warnings;
my $x = 3;
my $sub = sub :lvalue {$x};
print "$sub\n";
print "$x\n";
&$sub = 5;
print "$x\n";
Ausgegeben wird erst eine Code-Referenz, dann 3 und zum Schluß 5.\n\n

<!--EDIT|steffenw|1090356093-->
$SIG{USER} = sub {love 'Perl' or die};
lichtkind
 2004-07-21 01:01
#84659 #84659
User since
2004-03-22
5679 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
murphy , übrigens sehr schicken avatr hast du und sehr sinnig
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
murphy
 2004-07-21 01:20
#84660 #84660
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
[quote=steffenw,20.07.2004, 22:15]...
Habe gerade noch etwas probiert:
Code: (dl )
1
2
3
4
5
6
7
8
use strict;
use warnings;
my $x = 3;
my $sub = sub :lvalue {$x};
print "$sub\n";
print "$x\n";
&$sub = 5;
print "$x\n";
Ausgegeben wird erst eine Code-Referenz, dann 3 und zum Schluß 5.[/quote]
Wie schon betterworld weiter oben bemerkte, hat das Subroutinenattribut 'lvalue' allerdings nicht direkt etwas mit Referenzen auf den Typ 'LVALUE' zu tun -- jedenfalls nicht solange das Ziel der Referenz auch noch irgendwie durch einen anderen Datentyp beschreibbar ist.
Bei Gelegenheit muss ich mir wohl mal den Perl-Quellcode zu Gemüte führen, um den genauen Grund zu erfahren, der dieses Konstrukt mit der LVALUE-Referenz nötig macht...
When C++ is your hammer, every problem looks like your thumb.
Crian
 2004-07-21 11:13
#84661 #84661
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Was bedeutet diese sub : lvalue Schreibweise? Wird damit gesagt,dass die Funktion als lvalue auftreten kann wie substr?
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
kabel
 2004-07-21 11:48
#84662 #84662
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
genau. EDIT: rant geloescht ...
http://www.perldoc.com/perl5.8.4/pod/perlsub.html#Lvalue-subroutines\n\n

<!--EDIT|kabel|1090396173-->
-- stefan
ptk
 2004-07-21 13:23
#84663 #84663
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Mit lvalue-Subroutinen kann man die haessliche Schreibweise fuer Setter-Methoden:
Code: (dl )
$object->foo($newval)
durch eine Zuweisung ersetzen:
Code: (dl )
$object->foo = $newval
Das CPAN-Modul Class::Accessor::Lvalue kann das:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
package Foo;
use base 'Class::Accessor::Lvalue';
_ _ PACKAGE _ _ ->mk_accessors(qw(foo bla bar));

sub new { bless {}, shift }

package main;

$foo_obj = Foo->new;
$foo_obj->foo = 123;
warn $foo_obj->foo;

(Grrr, kann man eigentlich den Bug mit dem doppelten Unterstrich eigentlich auf die Schnelle loesen?)
Crian
 2004-07-21 14:25
#84664 #84664
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
schick, danke Euch beiden
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
<< |< 1 2 >| >> 19 Einträge, 2 Seiten



View all threads created 2004-07-20 20:20.