1 2 3 4 5 6 7 8
use Data::Dumper; my $string = Dumper(\%hash); # speichere $string in datei ... # lese aus datei in $string my $hashref = eval $string; # und wenns sein muss: my %hash = %$hashref;
2013-09-21T16:19:02 pqdie einfachste möglichkeit, eine datenstruktur als text zu speichern, ist Data::Dumper
die ausgabe ist ausführbarer perl-code, weshalb man beim wieder-einlesen ein eval ausführen muss (weshalb man hier unbedingt darauf achten muss, dass der dateiinhalt vetrauenswürdig ist und nicht von aussen kommt, da jeder enthaltene perl-code einfach ausgeführt wird)
2013-09-26T06:12:26 biancaSyntax Zeichen wie Klammern, Kommata, Semikoli etc. maskiert der Dumper doch korrekt, oder?
Quotestringified perl data structures, suitable for both printing and "eval"
[...]
The return value can be "eval"ed to get back an identical copy of the original reference structure.
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 diagnostics; my %config = ( max_prozesse => 5, ); use Data::Dumper; open (my $fh,'>','config.dat') or die $!; print $fh Dumper(\%config); close($fh); open ($fh,'<','config.dat') or die $!; my $config_neu = eval <$fh>; print Dumper($config_neu);
Quote$VAR1 = undef;
1 2 3 4
open ($fh,'<','config.dat') or die $!; my $config_neu = eval <$fh>; die $@ if $@; print Dumper($config_neu);
1 2 3 4 5 6 7 8 9
open ($fh,'<','config.dat') or die $!; my $config_neu; { $/ = undef; # kein Zeilentrenner beim Einlesen verwenden my $s= <$fh>; # in einem Rutsch einlesen $s=~s|\$VAR1|\$config_neu|; # Zielvariable für eval setzen eval "$s"; # Code ausführen } print Dumper($config_neu);
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
use Data::Dumper; $Data::Dumper::Terse = 1; open (my $fh,'>','config.dat') or die $!; print $fh Dumper(\%config); close($fh); open ($fh,'<','config.dat') or die $!; my $config_neu; { $/ = undef; my $s= <$fh>; eval '$config_neu='.$s; } die $@ if $@; print Dumper($config_neu);
2013-09-26T08:04:41 GwenDragonDafür gibts Terse, das lässt die Variable weg und du bekommst einen anonymen Hash.
Musst halt im eval die noch einbauen.
Code (perl): (dl )1 2 3 4 5use Data::Dumper; $Data::Dumper::Terse = 1; ... eval '$config_neu='.$s; }
2013-09-26T07:16:25 biancaCode (perl): (dl )1 2 3 4#!/usr/bin/perl open ($fh,'<','config.dat') or die $!; my $config_neu = eval <$fh>; print Dumper($config_neu);
Quote$VAR1 = undef;
2013-09-26T11:14:35 pqich korrigiere mich, das mit Data::Dumper ist nicht die einfachste möglichkeit.
2013-09-21T15:43:30 der_thomasgibt es in Perl eine Möglichkeit einen Hash-inhalt mit Bordmitteln (also ohne ein externes CPAN Modul*) zu speichern
* der Grund warum kein CPAN Modul ist einfach der dass ich mich mit der Installation von externen Modulen noch nicht befasst habe und da jetzt am Anfang erst mal eines nach dem anderen machen will ;)
Für diejenigen, die Python ein wenig kennen, ich meine sowas wie 'pickl'.
import pickle
use Python::Serialise::Pickle;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
#!/usr/bin/perl use DB_File; use strict; use warnings; my $db_file="data.db"; # @array an das Modul "DB_File" binden tie( my @data, "DB_File", $db_file, O_RDWR|O_CREAT, 0666, $DB_RECNO) or die "ERROR open $db_file: $!\n"; # erster Durchlauf # Array befüllen @data=qw( nur ein kleiner Test ) if(!@data); # Ausgabe des Arrays print join(" ",@data)."\n"; # Array zu Testzwecken rotieren push(@data,shift(@data));
1
2
3
4
5
6
7
8
9
10
use JSON;
my $hash = {};
open(FILE, ">file.txt")
or die "Fehler: $!\n";
print FILE to_json($hash);
close(FILE);