Schrift
[thread]324[/thread]

Data::Dumper: Will nich so, wie ich es will

Leser: 3


<< >> 6 Einträge, 1 Seite
Free Faq
 2004-07-12 17:31
#3129 #3129
User since
2003-09-10
141 Artikel
BenutzerIn
[default_avatar]
Hmm, irgendwie hab ich ein Problem mit dem Dumper, oder auch nicht :rolleyes:
Hab hier ein Beispielscript:
Code: (dl )
1
2
3
4
5
6
7
use Data::Dumper;
%Hash = (
'Time' => '360',
'Option' => 'A',
'Nick' => 'Blub'
);
print $Local = Data::Dumper->Dump([\%{Hash}], ["Hash"]);

Ausgabe:
Code: (dl )
1
2
3
4
5
$Hash = {
'Time' => '360',
'Nick' => 'Blub',
'Option' => 'A'
};


Das ist aber nicht die Ausgabe, die ich brauche :confused:
Will doch nur nen stink normalen Hash! Was mach ich falsch? Ich müsste das in dem Format haben:
Code: (dl )
1
2
3
4
5
%Hash = (
'Time' => '360',
'Nick' => 'Blub',
'Option' => 'A'
);


Klar so wie es jetzt ist, gehts auch, aber is irgendwie unnötig kompliziert :(
Haut mich nicht, ich bin ein Noob!
pq
 2004-07-12 17:48
#3130 #3130
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=Free Faq,12.07.2004, 15:31]
Code: (dl )
print $Local = Data::Dumper->Dump([\%{Hash}], ["Hash"]);
[/quote]
print Data::Dumper->Dump([\%Hash], ["*Hash"]);
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
Free Faq
 2004-07-12 17:51
#3131 #3131
User since
2003-09-10
141 Artikel
BenutzerIn
[default_avatar]
Rofl ... Autsch!
Darauf muss man erstmal kommen.
Habs gerad ausprobiert uns es tut!
Danke!
Haut mich nicht, ich bin ein Noob!
Dubu
 2004-07-12 17:56
#3132 #3132
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Es hoert sich so an, als wolltest du Datenstrukturen zwischenspeichern oder zwischen Programmen austauschen. Evtl. ist dir ja auch mit Storable.pm geholfen.
root
 2005-07-13 23:41
#3133 #3133
User since
2003-08-15
120 Artikel
BenutzerIn
[default_avatar]
Ein sehr guter Beitrag, besonders der letzte :-)

Ich wollte ein Hash speichern und beim nächsten Aufruf wieder holen. Hilfreich im CGI.
Da ich hier gelandet bin, landen vielleicht noch mehr mit diesem Wunsch hier, darum meine Lösung mit Storable. Ein geiles Modul, funktioniert einfach, nur schade, dass der File kein ASCII ist.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
use Storable qw(lock_store lock_nstore lock_retrieve);
# aso ...
# oben im CGI

# Daten wie die letzte Änderung werden in einem Hash gespeichert, dass über den Storable bei jeden Aufruf gelesen und später vor der Ausgabe wieder geschrieben wird.
my $dynfilename = "oe2edit_dynamischeinfos.dat";
my %dynInfo = ('default' => 'default stuff');

my $dynhashref = lock_retrieve($dynfilename);
%dynInfo = %$dynhashref;
# aso ...
# kurz vor der Ausgabe, also am Ende dann

# Dynamische Infos über den Storable in Datei speichern.
# Das Hash wird in einer Storable gespeichert und am Anfang des Programms wird diese Datei wieder ausgelesen.
lock_store \%dynInfo, $dynfilename; # wo ist der Unterschied
lock_nstore \%dynInfo, $dynfilename; # zwischen den zwei?


Nur noch eine kleine Sicherheitsfrage, wenn ich das so mache, mit dem lock, heißt es dann, zwischen dem einlesen und dem wegschreiben ist die Datei für andere gesperrt?!
Also wenn ein User B das CGI aufruft, während es für User A noch den Seitenaufbau generiert, dann muss User B warten bis das Hash für User A gespeichert wurde?\n\n

<!--EDIT|root|1121284340-->
ptk
 2005-07-14 12:58
#3134 #3134
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
nstore speichert immer in Big endian ab, store im Endian-Mode des jeweiligen Rechners. Sprich: wenn du Storable-Dateien zwischen verschiedenen Maschinen wie Mac/Sun und PC austauschen willst, dann solltest du immer nstore verwenden. Der Performance-Hit auf Intel-Maschinen sollte nicht so schlimm sein.

Die lock_*-Varianten kannte ich noch nicht --- man sollte von Zeit zu Zeit mal Manpages lesen :-)
<< >> 6 Einträge, 1 Seite



View all threads created 2004-07-12 17:31.