Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]12389[/thread]

Variablen aus einem array erstellen

Leser: 1


<< |< 1 2 3 >| >> 22 Einträge, 3 Seiten
Gast Gast
 2008-08-21 16:22
#113831 #113831
Hi,

ich bin Anfänger und habe grad ein Projekt, bei dem ich folgendes Problem habe:

Ich habe ein Array, das so aussieht:

@coord = (a111, a112, a113...) usf.

Insgesamt 81 Einträge. Jetzt will ich, dass diese Einträge die Namen von Variablen sind, konkret will ich ein neues Array, das so aussieht:

@coord2 = ($a11, $a112, $a113...) usf.

Vorschläge?
havi
 2008-08-21 16:57
#113835 #113835
User since
2003-08-04
2036 Artikel
BenutzerIn
[Homepage]
user image
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/usr/bin/perl

use warnings;
use strict;

my @coord = ("a111", "a112", "a113");

my @coord2 = ();
for (my $i = 0; $i <= $#coord; $i++) {
$coord2[$i] = "\$".$coord[$i];
} # for

print join("\n", @coord2);


Gruss,
havi
LanX-
 2008-08-21 17:06
#113839 #113839
User since
2008-07-15
1000 Artikel
BenutzerIn

user image
Gast+2008-08-21 14:22:51--
Insgesamt 81 Einträge. Jetzt will ich, dass diese Einträge die Namen von Variablen sind, konkret will ich ein neues Array, das so aussieht:

@coord2 = ($a11, $a112, $a113...) usf.


Code (perl): (dl )
@coord2 = ('$a11', '$a112', '$a113'...)

wenn du was anderes meinst, dann erklär bitte genauer was du willst ...

aber ich vermute du willst den Inhalt der Variablen: (ungetestet)
Code (perl): (dl )
1
2
3
4
{
  no strict refs;
  @coord2= map {$$_} @coord1; 
}


NACHTRAG: falls deine Variablennamen aus externer Quelle sind, beachte den Securityaspekt...
havi
 2008-08-21 17:10
#113841 #113841
User since
2003-08-04
2036 Artikel
BenutzerIn
[Homepage]
user image
Gast+2008-08-21 14:22:51--
die Namen von Variablen sind, konkret will ich ein neues Array, das so aussieht:

@coord2 = ($a11, $a112, $a113...) usf.


@LanX-: vermute aber du hast recht...
pq
 2008-08-21 18:31
#113851 #113851
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
benutze niemals variablen für variablennamen. für sowas gibt es arrays (name1, name2, ...)
und hashes (name_foo, name_bar, ...).
vielleicht solltest du eher mal sagen, was du bezwecken willst.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
pq
 2008-08-21 18:35
#113852 #113852
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
LanX-+2008-08-21 15:06:55--
NACHTRAG: falls deine Variablennamen aus externer Quelle sind, beachte den Securityaspekt...

nicht nur das.
variablen als variablennamen ist auch einfach unwartbar. sollte man einfach nicht machen,
nicht empfehlen und auch nicht den code zeigen. sonst schlagen wir uns mit den folgen rum,
wenn in einem halben jahr jemand ankommt und sagt "ich hab hier diesen code übernommen,
wenn ich das und das ändere, funktionierts nicht mehr"
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
LanX-
 2008-08-21 19:41
#113854 #113854
User since
2008-07-15
1000 Artikel
BenutzerIn

user image
@pq: Na, erst letztens hast du gezeigt wie man mit s///ee den ersetzungsstring dynamisch interpretieren kann. Symrefs sind deutlich sicherer als Evals! ;-)

Quote
benutze niemals variablen für variablennamen. für sowas gibt es arrays (name1, name2, ...)
und hashes (name_foo, name_bar, ...).
...
variablen als variablennamen ist auch einfach unwartbar.


ich verstehe nicht, inwiefern hashkeys wartbarer sein sollen. Z.B. Packagevariablen sind doch letztlich auch nur Einträge in %main:: respektive %packagename::
pq
 2008-08-21 20:49
#113856 #113856
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
LanX-+2008-08-21 17:41:32--
ich verstehe nicht, inwiefern hashkeys wartbarer sein sollen. Z.B. Packagevariablen sind doch letztlich auch nur Einträge in %main:: respektive %packagename::

sicher. aber du greifst anders drauf zu.
da mjd da was schönes zu geschrieben hat, hier einfach mal die links:
http://perl.plover.com/varvarname.html
http://perl.plover.com/varvarname2.html
http://perl.plover.com/varvarname3.html

edit: aussagekräftiger absatz daraus:
Quote
When you write my $x = 1, the effect is confined to the current block. When you write $main::x = 1, you can figure out the effect by looking through the program to see who looks at $main::x. The instant you write $$name = 1, you don't know any more what the effect will be or where it will crop up; it could be anywhere. You have just turned every 25-line debugging problem into a potential 700-line debugging problem.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
moritz
 2008-08-21 22:07
#113857 #113857
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
Variable Packagevariablen können immer mit anderen, regulären Packagevariablen kollidieren, die man für andere Zwecke benutzen will.

Ausserdem kann man einen Hash leichter an eine Funktion übergeben oder in einem Objekt speichern.
LanX-
 2008-08-21 22:28
#113859 #113859
User since
2008-07-15
1000 Artikel
BenutzerIn

user image
@pq: danke für den interessanten Link, aber bei diesen anonymen Glaskugelgästen gehts mir wie mjd

When people come into comp.lang.perl.misc asking how to do something stupid, I'm never quite sure what to do. I can just answer the question as asked, figuring that it's not my problem to tell people that they're being stupid. That's in my self-interest, because it takes less time to answer the question that way, and because someone might someday pay me to clean up after their stupidity, as happened in this instance. But if I do that, people might jump on me for being a smart aleck, which has happened at times. (``Come on, help the poor guy out; if you know what he really needs why don't you just give it to him?'')

On the other hand, I could try to answer on a different level, present a better solution, and maybe slap a little education on `em. That's nice when it works, but if it doesn't it's really sad to see your hard work and good advice ignored. Also, people tend to jump on you for not answering the question. (``Who are you to be telling this guy what he should be doing? Just answer the question.'')


Oder auf deutsch: Dumme Frage, dumme Antwort.

Mal auf der Metaebene:
Im Interesse des Forums wärs schön wenn die fitten Ratgeber hier davor geschützt werden Stunden in die Beantwortung von hingerotzten Fragen zu investieren. Da werden Perlen vor die Säue geworfen die andernorts eher benötigt würden.

Es könnte reichen grundsätzlich blöde Fragen mit kurzen (höflichen) Gegenfragen zu beantworten, wenn sich nicht immer jemand fände der einen auf Mutter Theresa machen muss.


Ich versuche den Mittelweg, kurze Frage zurück, kurze Antwort ohne Gewähr.


Und um die Fragestellung grundsätzlich zu beantworten, in den meisten Fällen würde ich auch Hashes nutzen, insbesondere weil mir der Ansatz auch potentiell deprecated scheint. Allerdings hat mjd IMHO unterschlagen das man mit package arbeiten könnte, was aber meistens eh viel aufwändiger ist als mit Hashes.
<< |< 1 2 3 >| >> 22 Einträge, 3 Seiten



View all threads created 2008-08-21 16:22.