На самом деле лучше даже вот так:
$string = '(var1=0x0"Comment for var1",var2 = 0x1 , var3 =0x2 "Comment for var3",var4=4)"Comment111"';
$string =~ /\((.*)\)/;
$vars = $1; # Забираем то что в скобках, если там что-то есть/
$string =~ /\((.*)\)\s*\"(.*)\"/;
$comment = $2; # Забираем то что после скобок, если там ничего нет, прошлая версия скрипта не сработает, она не только не получит $comment но и $vars прое.ет
@var_and_comment = split /\s*\,\s*/, $vars; # То, что было в скобках раздлеить по запятым, с возможными пробелами впереди и сзади, положить в массив.
foreach $var_and_comment (@var_and_comment ) {
$var_and_comment =~ /(\w+)\s*=\s*(\w+)/;
$name = $1; $value{$name} = $2; # Делим по '=' с возможными пробелами впереди и сзади. Предполагаю, что строка ..., varN=, .... не допустима.
$var_and_comment =~ /(\w+)\s*=\s*(\w+)\s*\"(.*)\"/;
$comment{$name} = $3; #Забрать коментарий, если есть.
}
foreach $key (keys %value) {
print "$key = $value{$key}, $comment{$key} | \"$comment\" \n";
} |