私はこれをしたい:
my %options = makeHash("user=bob,pass=123");
誰かがこれを機能させることができればボーナスポイント...
my %options = makeHash('user="bob,a",pass=123');
複数の split() を使用して最初のメソッドを簡単に作成できますが、これを実行できる Perl 固有のクールでエレガントな方法があるかどうかを知りたいです...
私はこれをしたい:
my %options = makeHash("user=bob,pass=123");
誰かがこれを機能させることができればボーナスポイント...
my %options = makeHash('user="bob,a",pass=123');
複数の split() を使用して最初のメソッドを簡単に作成できますが、これを実行できる Perl 固有のクールでエレガントな方法があるかどうかを知りたいです...
(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;
}
キーと値がすべて英数字の場合は、次のように記述できます
my %options = "user=bob,pass=123" =~ /\w+/g;
または、2番目のケースの場合
my %options = 'user="bob,a",pass=123' =~ /(\w+)="?([\w,]+)/g;
前後にスペースがあるかどうかに関係なく、データに表示できる文字を正確に明確にする必要があります=
。