-3

私はこれをしたい:

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

誰かがこれを機能させることができればボーナスポイント...

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

複数の split() を使用して最初のメソッドを簡単に作成できますが、これを実行できる Perl 固有のクールでエレガントな方法があるかどうかを知りたいです...

4

2 に答える 2

8

(Perl 5のコアモジュール)を使用Text::ParseWordsしてフィールドを解析し、フィールド内の引用符で囲まれたコンマ記号を克服することもできます. 戻り値はハッシュではなくハッシュ参照であることに注意してください。

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;
}
于 2013-04-11T11:42:07.837 に答える
1

キーと値がすべて英数字の場合は、次のように記述できます

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

または、2番目のケースの場合

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

前後にスペースがあるかどうかに関係なく、データに表示できる文字を正確に明確にする必要があります=

于 2013-04-11T11:40:48.760 に答える