Jemand zu Hause?
Data::Dumper1 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;
Wie frage ich & perlintro
brian's Leitfaden für jedes Perl-Problem
Wie frage ich & perlintro
brian's Leitfaden für jedes Perl-Problem2013-09-21T16:19:02 pqdie einfachste möglichkeit, eine datenstruktur als text zu speichern, istData::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)
CGI die CGI Variablen in ein Hash einlese und das mit Dumper in eine Datei schreibe und mit eval in einem anderen Script wieder einlese, ist das ein konkretes Sicherheitsrisiko?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.
Wie frage ich & perlintro
brian's Leitfaden für jedes Perl-Problem1 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; }
Wie frage ich & perlintro
brian's Leitfaden für jedes Perl-Problem
Wie frage ich & perlintro
brian's Leitfaden für jedes Perl-Problem
Wie frage ich & perlintro
brian's Leitfaden für jedes Perl-Problem2013-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;
Wie frage ich & perlintro
brian's Leitfaden für jedes Perl-Problem2013-09-26T11:14:35 pqich korrigiere mich, das mit Data::Dumper ist nicht die einfachste möglichkeit.
Wie frage ich & perlintro
brian's Leitfaden für jedes Perl-Problem2013-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;
DB_File1 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);
Wie frage ich & perlintro
brian's Leitfaden für jedes Perl-Problem