文字列操作に関する質問です。の回答のプログラムについての質問です
以前、”文字列操作に関する質問です。”という質問タイトルで投稿をしてある回答をいただいたのですが、
その回答にあるプログラムが目的どおり動くのはわかりましたが読解がどうしても出来ないので教えていただけないでしょうか。
以下がそのプログラムです。
$_="テスト,:10,田中<TANAKA>NONAMAEHA一郎<ITIROU>TO<I>IMASU,N000,123,__,050210,99999,";
@a = split(/,/,$_,-1);
@b = $a[2] =~ /([^A-Z][^<]*)<([A-Z]+)>/g;
($fmt = $a[2]) =~ s/[^A-Z][^<]*<[A-Z]+>/%s/g;
open(OUT, ">out.txt");
foo([@b], []);
close(OUT);
sub foo {
my @b = @{$_[0]};
my @c = @{$_[1]};
my @d = splice(@b, 0, 2);
if (@d) {
foo([@b], [@c,$d[0]]);
foo([@b], [@c,$d[1]]);
return;
}
$a[2] = sprintf($fmt, @c);
print OUT join(",", @a)."\n";
}
まず4行目ですが、
([^A-Z][^<]*)<([A-Z]+)>は、A-Z以外の文字・<以外の文字の0回以上の繰り返し・<A-Zの文字の1回以上の繰り返し>
という意味だと思ったのですが表示させてみると@bの内容は$b[0]=田中,$b[1]=TANAKA,$b[2]=一郎,...$b[5]=Iでした。
それと7行目のfoo([@b], []);において引数[@b], []がどういうものなのかわかりません。[]って何でしょうか?
さらに11行目my @b = @{$_[0]};において@{$_[0]}って何でしょうか。ハッシュ(連想配列)??
同様に15、16行目foo([@b], [@c,$d[0]]);foo([@b], [@c,$d[1]]);もよくわかりません。
自分でもいろいろ調べたつもりなのですがどうしてもわかりません。
どうかよろしくお願いします。
お礼
全くその通りでした。 お手数おかけいたしました。