[Vienna-pm] Namen der Variable erhalten

Baier Oliver oliver.baier at lotterien.at
Fri Feb 23 01:00:40 PST 2007


> -----Ursprüngliche Nachricht-----
> Von: Wolfgang Laun [mailto:Wolfgang.Laun at thalesgroup.com] 
> Gesendet: Freitag, 23. Februar 2007 08:56
> 
> Als weitere Variante käme in Frage, alle auf diese Weise zu 
> übergebenden 
> Variablen mit tie an ein Objekt zu binden, das Name und Wert 
> verwaltet.
> Da gehen dann auch lexikalische Variablen, und 
> programmiertechnisch ist 
> es halbwegs akzeptabel: Abgesehen von der Notwendigkeit, tie() 
> aufzurufen, muss man nur aufpassen, alle Übergaben per 
> Referenz zu machen.
> 
> #! /usr/bin/perl -w
> use strict;
> 
> sub procVar(\$) {
>     my( $aRef ) = @_;
>     print "name is ", nameof( $aRef ), "\n";
>     print "value is $$aRef\n";
>     $$aRef++;
> }
> sub nameof($){
>     my $aRef = shift;
>     return tied( $$aRef )->getName();
> }
> 
> tie my $x, 'NameValue', 'x', 42;
> procVar( $x );
> print "x=$x\n";
> 
> package NameValue;
> sub TIESCALAR {
>     my( $class, $name, $value ) = @_;
>     bless( { name => $name, value => $value }, $class );
> }
> sub FETCH {
>     my $self = shift();
>     return $self->{value};
> }
> sub STORE {
>     my( $self, $newval ) = @_;
>     $self->{value} = $newval;
> }
> sub getName(){
>     my $self = shift();
>     return $self->{name};
> }
> 1;
> 
> Aber warum? Wenn Name und Wert als Daten verarbeitet werden 
> sollen, dann 
> ist doch ein Hash sowieso zweckmäßiger?

erstmal danke fuer die Auflistung der Moeglichkeiten!

auch gleich als Antwort auf die Frage von Stefan:

Ich wollte mir einfach einen Hash mit einem Value pro Key ersparen.

Mein Beispiel kann man sich so vorstellen:

Das Script bekommt eine Liste von Argumenten uebergeben, die es je nach
Position und Inhalt unterschiedlich verarbeiten muss. Da ich die
Argumentliste nicht zweimal durchgehen wollte, habe ich nach einer
praktischen einfachen Loesung gesucht und mich in eine Sackgasse verrannt.
Ich hab mir gedacht, dass es mit Perl doch einfach moeglich sein muss,
den Namen der Variable zu erhalten, die man grad uebergeben bekommen hat.

Leider ist mir erst jetzt eingefallen dass sich meine Anforderung
vermutlich auch durch die Nutzung der Array-Indizes loesen laesst...

	### Beispiel des bisher falschen Ansatzes:
	### my ($anton, $berta, $caesar, $dora) = @names;
	### besser:
	foreach (0 .. $#names) {
		Name anhand $_ bekannt, da die Position aussagekraeftig ist
		Wert ueber $names[$_] zugreifbar
	}

Vermutlich greifen sich jetzt einige auf den Kopf, aber diese einfache
Moeglichkeit ist mir gestern Abend einfach nicht eingefallen, ich wollte
keinen counter mitschleppen und hab mich in die VarName-Sache verrannt.

Das hat man davon, wenn man nur selten zum schreiben von Perl-Code kommt...

Apropos, als Info zu meinem letzten Fall mit ssh unter OpenVMS:

Die Verwendung von Net::SSH hat leider nicht geklappt, weil ein Haufen an
Modulen dafuer erforderlich ist, von dem sich einige unter VMS einfach
nicht gut installieren lassen. Das faengt mit case-Problemen an, weil von
ODS2 mit lauter Grossbuchstaben ausgegangen wird, geht mit Pfadproblemen
weiter, weil einfach Unix-Syntax auf OS-Ebene verwendet wird, und endet
in einem Haufen weiterer Kleinigkeiten.

Der Workaround fuer das "ssh Bufferproblem" war, $/="\r\n" in Kombination
mit s#\n##g in jeder Zeile des open-commands, weil die Newlines beliebig
reingestreut werden (erstmals immer nach 512 aber spaeter im Stream
teilweise auch nach 5 Bytes!).

lg
Oliver

Oesterreichische Lotterien Gesellschaft m.b.H., Rennweg 44, A-1038 Wien,
FN 54472 g, Handelsgericht Wien, DVR-Nr: 0476706

---
Laden Sie das E-Mail Wurzelzertifikat der Oesterreichischen Lotterien zur Vervollständigung des Validierungspfades.
Download the E-Mail root certificate of the Austrian Lotteries for completing the validation-path. 
http://www.lotterien.at/gaming/mailcert.html

-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/x-pkcs7-signature
Size: 3643 bytes
Desc: not available
Url : http://mail.pm.org/pipermail/vienna-pm/attachments/20070223/d37d2366/attachment.bin 


More information about the Vienna-pm mailing list