Hiro's program memo

プログラムに関するメモ書き。研究ではEmacsでPerlを書いてます。

配列に配列をpush

@a1 = (['あ','い','う','え','お'],

   ['か','き','く','け','こ']);
@a2 = ('さ','し','す','せ','そ');
push @a1,\@a2; #ここがポイント
for($i = 0; $i < scalar(@a1); $i++){
 for($j = 0; $j < scalar(@{$a1[$i]}); $j++){
  print $a1[$i][$j]." ";
 }
 print "\n";
}

 

これで

あ い う え お

か き く け こ

さ し す せ そ

 

と表示できます。

メタ文字をエスケープさせる

オリジナルのテキストに?などのメタ文字があると正規表現を用いる時に不便。

なので自動的にエスケープさせると便利

 

$original = 'hello! What's your name?';

$escaped = quotemeta $original;

 

 

置換する時の注意

Perlで置換を用いる時はメタ文字に注意しなければならない。

例えば

 

$word = 'Are you free tomorrow?';

$erase = '?';

$word =~ s/$erase//; #ハテナを消そうとする

 

ただし、これだと'?'がメタ文字と認識され消えない。

 

$word =~ s/\Q$erase\E//;

 

これで解決。\Qと\E間で囲んだメタ文字は文字として扱われる。ただ、$を用いている変数は使えるみたい。