在perl中如何将“a=1,b=2”拆分成散列?

在perl中如何将“a=1,b=2”拆分成散列?,perl,Perl,我想这样做: my %options = makeHash("user=bob,pass=123"); 如果有人能做到这一点,将获得额外积分 my %options = makeHash('user="bob,a",pass=123'); 我可以很容易地用多个split编写第一个方法,但我想知道是否有一种非常优雅的方法专门用于Perl,这是可以做到的…如果您的键和值都是字母数字的,那么您可以直接编写 my %options = "user=bob,pass=123" =~ /\w+/g;

我想这样做:

my %options = makeHash("user=bob,pass=123");
如果有人能做到这一点,将获得额外积分

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

我可以很容易地用多个split编写第一个方法,但我想知道是否有一种非常优雅的方法专门用于Perl,这是可以做到的…

如果您的键和值都是字母数字的,那么您可以直接编写

my %options = "user=bob,pass=123" =~ /\w+/g;
或者,对于你的第二个案例

my %options = 'user="bob,a",pass=123' =~ /(\w+)="?([\w,]+)/g;
您需要明确数据中可能出现的字符,以及=etc周围是否有空格。

您可以使用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;
}

你试过什么?你在哪里遇到麻烦?现在,你的问题读起来像是请为我写这段代码。闻起来像是cvs什么的similar@loldop并发版本系统?: