Schrift
[thread]7813[/thread]

Name der Variablen?



<< >> 8 Einträge, 1 Seite
master
 2006-03-21 22:37
#63930 #63930
User since
2003-10-20
610 Artikel
BenutzerIn
[default_avatar]
Code: (dl )
1
2
3
4
5
6
$mist = '77';

sub xx
{
print $_; #Hier soll nun aber "mist" augegeben werden
}



Ich brauche den Namen der Variable...
Wie geht das?
Gruss
$i='re5tsFam ^l\rep';$i=~s/[^a-z| ]//g;$\= reverse "\U!$i";print;
Ronnie
 2006-03-21 23:04
#63931 #63931
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Hmm, wenn du den Wert als Suchkriterium nimmst, dann könntest du einen Hash verwenden:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/perl

use strict;
use warnings;

use Data::Dumper;

my %lookup;
$lookup{'red'} = 77;
$lookup{'blue'} = 33;

sub get_by_value {
my $val = shift;
return [grep { $lookup{$_} == $val } keys %lookup];
}

die Dumper get_by_value(77);

Ansonsten verstehe ich deine Fragestellung wohl falsch.
master
 2006-03-21 23:13
#63932 #63932
User since
2003-10-20
610 Artikel
BenutzerIn
[default_avatar]
ok geht um folgendes...

Code: (dl )
1
2
3
4
print makeXML('id',$id);

sub makeXML
{return "<$_[0]>$_[1]</$_[0]>";}





Wäre schön wenn ich das so übergeben könnte:

Code: (dl )
1
2
3
4
print makeXML($id);

sub makeXML
{return "<xxx>$_</xxx>";}


dort wo ide xxx sind müsste der Name der übergebenen Variable stehen, da ich den Namen und Wert nicht getrennt (doppelt) übergeben will.\n\n

<!--EDIT|master|1142976130-->
$i='re5tsFam ^l\rep';$i=~s/[^a-z| ]//g;$\= reverse "\U!$i";print;
murphy
 2006-03-22 01:02
#63933 #63933
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Ich möchte behaupten, dass das sauber nicht ohne Codetransformation vor der Kompilationsphase des Perlcodes machbar ist, da zum Beispiel lexikalische Variablen intern nicht zwingend einen Namen haben und auch für globale Variablen natürlich keine eindeutige Zuordnung vom Wert zur Variablen gewährleistet ist -- deine Subroutine bekommt ja als Parameter nur den Wert und nicht die Variable selbst übergeben. Außerdem wäre jede Suche der Variablen anhand ihres Wertes natürlich haarsträubend ineffizent.

Als ebenfalls haarsträubende Lösung könnte man statt des Wertes den Namen einer globalen Variablen übergeben. Also etwa so:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/perl
use strict;
use warnings;

sub makeXML {
no strict 'refs';
my $v = shift;
"<$v>${$v}</$v>";
}

our $bla = 42;
print makeXML('bla'), "\n";

Aber ich würde hiervon aus stilistischen Gründen abraten ;-)

Schließlich kann man sich unter Umständen auch noch etwas zusammenschustern, wenn man sich einmal anschaut, wie der Perl-Debugger dieses Problem löst.
When C++ is your hammer, every problem looks like your thumb.
renee
 2006-03-22 08:12
#63934 #63934
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ich würde trotzdem zu Ronnies Lösung raten! Dann kannst Du 'id' als Schlüssel nehmen...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
master
 2006-03-22 10:23
#63935 #63935
User since
2003-10-20
610 Artikel
BenutzerIn
[default_avatar]
murphys methode

kommt dem am nächsten.. bei ronnies
ist ja das Problem, dass ich die Variablen nicht als Hash habe..

Sondern nur in der form:
$ID = 7;

Der Witz soll ja sein, das ich nicht jedesmal
eine zuweisung machen muss, sondern die routine automatisch die Variable als Wert ins XML-Format ändert.


Ansonsten mach ich halt alle Variablen die dafür nötig sind, als Hash.. $Ding{'id'}


Gibts den wirklick keine funktion mit der man, den namen der variable (eigentlich doof) zurückgeben kann?\n\n

<!--EDIT|master|1143016035-->
$i='re5tsFam ^l\rep';$i=~s/[^a-z| ]//g;$\= reverse "\U!$i";print;
vayu
 2006-03-22 10:57
#63936 #63936
User since
2005-01-13
782 Artikel
BenutzerIn
[default_avatar]
ich würde es einfach doppelt übergeben. und zwar so

Code: (dl )
makeXML('$bla', $bla);


da kriegst dann durch die einfachen hochkommas den Namen der variablen und als zweites den Wert übergeben.
renee
 2006-03-22 12:35
#63937 #63937
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Namen sind Schall und Rauch. Ich würde mir an Deiner Stelle vielleicht Gedanken machen, wie ich die Datenstruktur von vornherein anders aufbauen kann. Was schreibt Dir denn vor, dass Du $ID = 7 anstatt von $values{ID} = 7 benutzen musst?
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
<< >> 8 Einträge, 1 Seite



View all threads created 2006-03-21 22:37.