Thread Hash of Hashes auf einen Rutsch aus txt-file schreiben (17 answers)
Opened by rabo at 2015-09-03 15:42

Linuxer
 2015-09-04 00:04
#182047 #182047
User since
2006-01-27
3870 Artikel
HausmeisterIn

user image
Doch, das darf/muss da stehen, man muss es nur richtig machen. ;-)
Leider postest Du wieder nichts brauchbares an Code, auf das man eingehen könnte...


Prinzipiell hast Du schon gute Tipps (Verweise auf andere Module) von den anderen bekommen.
Die solltest Du Dir anschauen, weil die folgenden Lösungen wohl funktionieren, aber grundlegend unsicher sind.
Der Code der geschriebenen Daten-Datei wird ausgewertet/ausgeführt. Wenn da also jemand etwas böses hinein schreibt, wird das im Kontext des Skriptes ausgeführt.

Man kann die Daten mit eval() oder mit do() einlesen:

Mit eval():

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#! /usr/bin/env perl
use strict;
use warnings;

use Data::Dumper;


my %data = (
    what => [
        1,2,3
    ],
    ever => [
        qw( a b c )
    ],
);

my $file = "/tmp/filename.txt";


### save %data to file as %name
open my $wh, '>', $file or die "open($file,w) failed: $!";
print $wh Data::Dumper->Dump( [ \%data ], [ "*name" ] );
close $wh or die "close($file) failed: $!";


### read to a lexical variable
### retrieve %name from file (you need to know %name before)
open my $rh, '<', $file or die "open($file,r) failed: $!";
my %name;
eval do { local $/; <$rh> };
close $rh;

print Data::Dumper->Dump( [ \%name ], [ '*name_it' ] );


Oder mit do() (schau genau hin, hier wird mehr als nur der Hash gesichert!):

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#! /usr/bin/env perl
use strict;
use warnings;

use Data::Dumper;


my %data = (
    what => [
        1,2,3
    ],
    ever => [
        qw( a b c )
    ],
);

my $file = "/tmp/filename.txt";


# save %data to file as %name
open my $wh, '>', $file or die "open($file,w) failed: $!";
print $wh Data::Dumper->Dump( [ \%data ], [ "*name" ] );
print $wh <<MESSAGE;
print "Hier schreibt ein Boeser Bube boese Sachen in die Datendatei....\n";
print "Diese prints aus der Datendatei werden ausgefuehrt...\n";
MESSAGE
close $wh or die "close($file) failed: $!";


###  B : read to a package variable
###  retrieve %name from file (you need to know %name before)
our %name;
do $file;


print Data::Dumper->Dump( [ \%name ], [ '*name_it' ] );
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!

View full thread Hash of Hashes auf einen Rutsch aus txt-file schreiben