2009-06-16
【perl】join関数とsplit関数、「@」が展開されるとどうなるの?
#! /usr/bin/perl use strict; use warnings; my @array = (453,45,778); print "@array\n"; #関数join('区切り文字',連結したい配列や文字) => なにか連結したいときに使用 print join('あ',@array),"\n"; #出力結果 => 453あ45あ778 print "\n"; my $x = 1; my $y = 2; my $z = 3; print join('点と',$z,$y,$x),"\n"; #出力結果 => 3点と2点と1 => 最後の要素の後には、区切り文字はつかない print join('点と',$z,$y,$x),"点です。\n"; #出力結果 => 3点と2点と1点です。 print "\n"; #以下の2つのprint分は同じ出力結果 => 3点と2点と1点です。 print '点数は',join('点と',$z,$y,$x),"点です。\n"; #「,」コンマを使用すると、コンマで区切られた別々の文として出力される。 print '点数は'.join('点と',$z,$y,$x)."点です。\n"; #「.」ピリオドを使用すると、連結された1文として出力される。(ピリオド=文字列連結演算子)
今回の大発見は、以下。「@」って、展開されると「$"」と認識されてスペースになる。だから配列の要素をprintすると、要素がスペースで区切られてprintされるんだね。
#! /usr/bin/perl use strict; use warnings; #split関数=>区切って要素に分解したいとき my $m = '127804508057305'; my @array1 = split(/0/,$m); print @array1."\n"; #出力結果 => 5 =>ピリオド(文字列連結演算子)を使うことで、@array1を配列ではなくスカラと無理にみなそうとする。配列をスカラと見なすと、要素の数を返す。 print "@array1\n"; #出力結果 => 1278 45 8 573 5 => @が展開されて配列と見なされている。※""内で展開される記号は、「\」と「@」の2つのみ。 print "\n"; $" = ','; #「@」は展開されるとスペースになり、各要素の間に入るようになっている。機械には、展開されたとき「$"」と見えていて、スペースを要素の間に入れろという命令と取る。そこで、「$"」を「,」と置き換えてみる。 print @array1."\n"; #出力結果 => 5 print "@array1\n"; #出力結果 => 1278,45,8,573,5 =>「@」が展開されたときのスペースを「,」に置き換えているので、「,」で区切ってprintされる。 print "\n"; print @array1,"\n"; #出力結果 => 12784585735 => @array1をスカラとは見ないしていない。ただ、「""」がないので@が展開されず、つながってprintされている。 print "@array1","\n"; #出力結果 => 1278,45,8,573,5 print "@array1\n"; #出力結果 => 1278,45,8,573,5
まとめは以下。
(1)join('区切り文字(のりの役割)',連結したい文字列や配列など) (2)split(/区切り位置(はさみの役割)/,ばらばらにしたい文字列など) (3)""(ダブルクォーテーション)内で展開される記号は、「@」と「\」の2種類(sjisのとき) →「@」が展開されると「$"」となり、要素の間に「スペース」を入れろという命令になる(=配列と見なしなさいという命令)
- 3 http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rlz=1T4GGLJ_ja&q=perl+ヒアドキュメント
- 2 http://www.google.co.jp/search?hl=ja&client=firefox&rls=org.mozilla:ja:official&hs=mEl&q=perl+比較&btnG=検索&lr=lang_ja
- 2 http://www.google.co.jp/search?hl=ja&client=firefox-a&rls=org.mozilla:ja:official&hs=E6E&q=ログイン HTML&btnG=検索&lr=lang_ja
- 2 http://www.google.co.jp/search?hl=ja&rlz=1C1CHMI_jaJP291JP305&q=perl+文字列 置換&btnG=検索&lr=
- 2 http://www.google.co.jp/search?q=perl 中身が空か調べる&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:unofficial&client=firefox-a
- 2 http://www.google.co.jp/search?q=perl+配列&lr=lang_ja&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&client=firefox-a
- 1 http://green.search.goo.ne.jp/search?OE=UTF-8&IE=UTF-8&from=eco_search&MT=perl+正規表現 4桁 数字&DC=10
- 1 http://s.luna.tv/search.aspx?q=Mac OS 種類&d=&s=0&gl=jp&hl=ja
- 1 http://search.minakoe.jp/rsss/rsss.asp?qry=perl&ics=sjis&stype=全&multi=1
- 1 http://search.yahoo.co.jp/search?p=16進法を文字列に変換&ei=UTF-8&fr=top_ga1&x=wrt