ファイルにハッシュ文字列を保存しています。ファイル{"a"=>1,"b"=>2}
を開いてこのハッシュ文字列をに保存します。これを$hash_string
に変換するにはどうすればよいですか?$hash_string
$hash_string_ref = {"a"=>1,"b"=>2}
質問する
1425 次
3 に答える
9
簡単な答え:
$ echo '{"a"=>1,"b"=>2}' > val.pl
$ perl -le 'my $foo = do "val.pl"; print $foo->{a}'
1
より良い答え: StorableやYAML、さらには JSONなど、より優れたデータのシリアル化形式を使用することを検討してください。
于 2013-02-27T09:27:12.123 に答える
5
あなたのデータ形式は「任意の Perl 式」のように見えますが、これはかなりひどいデータ形式です。代わりに、 JSONやより充実した機能を備えたYAMLを使用してみませんか?
use JSON::XS qw( encode_json decode_json );
sub save_struct {
my ($qfn, $data) = @_;
open(my $fh, '>:raw', $qfn)
or die("Can't create JSON file \"$qfn\": $!\n");
print($fh encode_json($data))
or die("Can't write JSON to file \"$qfn\": $!\n");
close($fh)
or die("Can't write JSON to file \"$qfn\": $!\n");
}
sub load_struct {
my ($qfn) = @_;
open(my $fh, '>:raw', $qfn)
or die("Can't create JSON file \"$qfn\": $!\n");
my $json; { local $/; $json = <$fh>; }
return decode_json($json);
}
my $data = {"a"=>1,"b"=>2};
save_struct('file.json', $data);
...
my $data = load_struct('file.json');
于 2013-02-27T10:44:56.050 に答える
5
Perl セーフを使用する
モジュールは任意の perl コードを (サンドボックスで) 実行し、結果を返します。ファイルにダンプされた構造などのデコードを含みます。
コード例:
use Safe;
my $compartment = new Safe;
my $unsafe_code = '{"a"=>1,"b"=>2}';
my $result = $compartment->reval($unsafe_code);
print join(', ', %$result);
于 2013-02-27T09:28:09.970 に答える