Ich schreibe Code, wo ich eine Subroutine als Lvalue und Rvalue zum Lesen und Schreiben von Datenbankwerten verwenden. Das Problem ist, ich möchte, dass es anders reagiert, je nachdem, ob es als L-Wert oder als R-Wert verwendet wird.Überprüfen Sie, ob eine Unterroutine als Lvalue oder Rvalue in Perl verwendet wird
Ich möchte das Unterprogramm in die Datenbank schreiben, wenn es als Lvalue verwendet wird, und aus der Datenbank lesen, wenn es als Rvalue verwendet wird.
Beispiel:
# Write some data
$database->record_name($subscript) = $value;
# Read some data
my $value = $database->record_name($subscript);
Der einzige Weg, ich die Marke denken kann, diese Arbeit ist eine Möglichkeit für das Unterprogramm zu finden, zu erkennen, ob sie als L-Wert verwendet wird, oder ein R-Wert und reagiert unterschiedlich für jeden Fall.
Gibt es eine Möglichkeit, dies zu tun?
Ich stimme zu, aber ich versuche, die Funktionalität einer ähnlichen API in Python für den Datenbankzugriff zu spiegeln und es scheint nur sauber aus einer UI-Perspektive mit einem Lvalue-Unterprogramm aussehen. – tjwrona1992
Wenn Sie Moose verwenden, gibt es [MooseX :: LvalueAttribute] (https://metacpan.org/pod/MoseX::LvalueAttribute). – ThisSuitIsBlackNot
Trotz der schlauen Idee und den Lösungen unten, muss ich sagen, dass ich [ysth] (http://stackoverflow.com/a/35184272/622310) zustimme, der vorschlägt, dass Sie einfach $ database-> record_name aufrufen sollten ($ subscript, $ value) 'um in die Datenbank zu schreiben. Dann muss Ihr Unterprogramm lediglich nach dem Vorhandensein des zweiten Parameters suchen. Etwas komplizierter als das und Sie werden Code erstellen, den niemand sonst versteht. – Borodin