2013-04-11 31 views
-3

我想這樣做:如何將「a = 1,b = 2」分成perl中的散列?

my %options = makeHash("user=bob,pass=123"); 

獎勵分,如果任何人都可以做這項工作...

my %options = makeHash('user="bob,a",pass=123'); 

我可以隨便寫有多個分割的第一個方法()的,但我想要知道,如果有特定於Perl的清涼優雅的方式可以做到這一點...

+3

你有什麼試過的?你在哪裏遇到麻煩?現在,你的問題就像是「請爲我寫這個代碼」。 – 2013-04-11 11:36:23

+0

聞起來像'cvs'或類似的東西 – gaussblurinc 2013-04-11 11:37:22

+2

@loldop並行版本系統? :) – TLP 2013-04-11 12:21:31

回答

1

如果你的關鍵字和值都是字母,那麼你可以只寫

my %options = "user=bob,pass=123" =~ /\w+/g; 

,或者你的第二個案例

my %options = 'user="bob,a",pass=123' =~ /(\w+)="?([\w,]+)/g; 

你需要清楚到底是什麼角色可以出現在你的數據是否有可能圍繞=等空間

8

您可以使用Text::ParseWords(Perl 5中的核心模塊)解析了字段,並且還克服了字段內引用的逗號符號。請注意,返回值是散列引用,而不是散列。

use strict; 
use warnings; 
use Text::ParseWords; 

my $options = makeHash('user="bob,a",pass=123'); 

sub makeHash { 
    my $str = shift; 
    my @foo = quotewords(',', 0, $str); # split into pairs 
    my %hash = quotewords('=', 0, @foo); # split into key + value 
    return \%hash; 
} 
相關問題