你能再解釋一下Storable的問題嗎?如果你看Perlport,在討論Bigendiness和Littleendiness後,它得出結論:
可以用兩種方式來回避這兩個問題。無論是傳輸和存儲數字總是文本格式,而不是原始二進制文件,或考慮使用模塊,如Data :: Dumper和可存儲(包括自perl 5.8)。將所有數據保存爲文本可以顯着簡化事宜。
因此,可保存的是普遍用於存儲和Perl中檢索數據,以及它不僅易於使用,但它是一個標準的Perl模塊。
問題是您希望能夠在沒有Perl程序的情況下編寫數據嗎?你可以簡單地編寫你自己的Perl模塊。在大多數Perl的安裝,該模塊可以被放置在同一個目錄中你的程序。現在
package Some_data; # Can be put in the same directory as the program like a config file
our $data; # Module variable which makes it accessible to your local program
$data = {}; # I am making this complex data structure...
$data->{NAME}->{FIRST} = "Bob";
$data->{NAME}->{LAST} = "Smith";
$data->{PHONE}->[0]->{TYPE} = "C";
$data->{PHONE}->[0]->{NUMBER} = "555-1234";
$data->{PHONE}->[1]->{TYPE} = "H";
$data->{PHONE}->[1]->{NUMBER} = "555-2345";
# Or use Subroutines
sub first {
return "Bob";
}
sub last {
return "Smith"
}
...
,你可以在你的計劃中包含的:
use Some_data;
my $first_name = $Some_data::data->{NAME}->{FIRST} # As a hash of hashes
# OR
my $first_name = Some_data::first; # As a constant
的好處對子程序的是,你不能在你的程序更改數據。他們是常數。實際上,這正是Perl常量的工作方式。
說到常量。你可以使用use constant
太:
package Some_data;
use constant {
FIRST => "Bob",
SECOND => "Smith",
};
而在你的程序:
use strict;
use warnings;
use Some_data;
my $fist_name = &Some_Data::FIRST; # Note the use of the ampersand!
不是很乾淨,因爲你需要的前綴常量與符號。有一些方法可以解決這個&符號,但它們並不是那麼漂亮。
現在,您有一種在程序中導入數據的方式,它的維護確實比JSON數據結構更難。除了use Module;
以外,您的程序無需執行任何操作即可獲取該數據。
最後一個可能性
這裏有一個我以前做過。我只是有一個看起來像你把命令行上的東西,然後用Getopt::Long在配置上拉一個配置文件:
CONFIGFILE
-first Bob -last Smith
-phone 555-1212
注意:它不不管你把它都在同一行或不:
use strict;
use warnings;
use Getopt::Long qw(GetOptionsFromString);
open my $param_fh, "<", $param_file;
my @parameters = <$param_fh>;
close $param_fh;
my $params = join " ", $parameters # One long string
my ($first, $phone);
GetOptionsFromString ($params,
"first=s" => \$first,
"phone=s" => \$phone,
);
你不能得到比這更容易維護!
[作爲單個Perl正則表達式的JSON解析器](http://www.perlmonks.org/?node_id=995856) – toolic
如果您完全解釋了*爲什麼不能使用CPAN模塊,可能會有所幫助。您提到不想讓用戶安裝模塊;這些最終用戶還是內部用戶?你必須支持哪些操作系統?有[封裝工具](https://metacpan.org/pod/pp)可以幫助你分發你的程序和它的依賴關係,但是沒有更多的細節,很難說這對你是否是一個可行的解決方案。 – ThisSuitIsBlackNot