# マッチ結果のリスト化
# リストコンテキストで /g を付けて評価する。
use strict;
use warnings;
use utf8;
use Encode;
#my $charsetConsole = 'UTF-8';
my $charsetConsole = 'CP932';
my $charsetFile = 'UTF-8';
binmode( STDIN, ":encoding($charsetConsole)" );
binmode( STDOUT, ":encoding($charsetConsole)" );
binmode( STDERR, ":encoding($charsetConsole)" );
# 次の文字列を「key=val」として分解する
# key は空白を含みうる。val は空白を含まない。
# 「t u」はマッチしないので無視される
my $line = "aa = bb cc dd= ee ff gg hh= ii jj kk = ll mm=nn o= p q r= s t u";
print "${line}\n\n";
# ペア単位でリスト化した後、key/valに分解。順序は保存される。
foreach my $pair ( $line =~ /[^=]*\S\s*=\s*\S+\s*/g ){
my( $key, $val ) = ( $pair =~ /^([^=]*\S)\s*=\s*(\S+)\s*$/ );
print "key:'${key}'\tval:'${val}'\n";
}
print "\n";
# マッチ結果リストをハッシュとして受ける。順序は保存されない。
my %pairs = ( $line =~ /([^=]*\S)\s*=\s*(\S+)\s*/g );
foreach my $key ( keys( %pairs ) ){
print "key:'${key}'\tval:'${pairs{$key}}'\n";
}
# EOF
aa = bb cc dd= ee ff gg hh= ii jj kk = ll mm=nn o= p q r= s t u
key:'aa' val:'bb'
key:'cc dd' val:'ee'
key:'ff gg hh' val:'ii'
key:'jj kk' val:'ll'
key:'mm' val:'nn'
key:'o' val:'p'
key:'q r' val:'s'
key:'jj kk' val:'ll'
key:'mm' val:'nn'
key:'q r' val:'s'
key:'ff gg hh' val:'ii'
key:'cc dd' val:'ee'
key:'aa' val:'bb'
key:'o' val:'p'