Perl

tr///による置換(第8章「もっと正規表現」続き)

英語の大文字と小文字を入れ替えたい場合に以下のようにしてもダメだ。 my $str = "How I wonder what you are.\n"; $str =~ s/[A-Z]/lc($&)/ge; $str =~ s/[a-z]/uc($&)/ge; print $str; http://ideone.com/IJRrI すべて大文字になってしまう。 そこで、tr/…

置換s///(第8章「もっと正規表現」続き)

今までは主に正規表現での検索についてやってきたけど、今回は検索した結果を置き換える置換s///に関して。 簡単な置換 置換には「s///」という機能(これは演算子?手続き?関数?構文????)を使うそうな。 次のようなスクリプトを実行すると、 my $str…

正規表現についていくつか

$1とか$2とかについて 選択させたい部分をカッコで囲むことがあるけど、やっぱりそれも$1とか$2とかを束縛するのかな?やってみよう。 my $str = 'interior and exterior'; while ($str =~ /(in|ex)\w+/g) { print "\$& = $&, \$1 = $1\n"; } http://ideone.…

第8章「もっと正規表現」

もっと正規表現をやるそうな。 マッチした範囲を複数個取り出す$1、$2、$3 my $str = '168,57,37'; if ($str =~ /(\d+),(\d+),(\d+)/) { my $height = $1; my $weight = $2; my $age = $3; print "\$height = $height\n"; print "\$weight = $weight\n"; pri…

文字クラスに関して

文字クラスとして、[1-3]とか[w-y]とかできるかな? 今まで文字クラスとして[0-9]や[0-9a-zA-Z_]などを学んだけど、[3-5]とか[w-y]とか行けるのかな?やってみた。 my @filename = ('hoge_3.log', 'hoge_4.log', 'hoge_5.log', 'hoge_6.log'); foreach (@fil…

第7章「正規表現の基本」

ある部分文字列を検索(または置換など)したい場合に、探したい文字列をパターンによって指定できる。その指定するパターンのことを正規表現と呼ぶ。 Perlでは、正規表現は /hoge/ のように、スラッシュで囲んで表現する。で、このパターンを演算子=~と組み…

第6章「繰り返し」つづき

foreach, while, forという3種類の繰り返しの構文について見てきた。これ以外にも繰り返しの構文(じゃないものも含む)があるらしい。 do until文、do while文(p163) 他の言語にもdo while文は見たことがあるね。条件判断をループの最後で行うパターン。…

第6章「繰り返し」

これまでforeachはやってきたけど、その他にもいくつか繰り返しのための構文がある。 foreach リストに対して次のような形で使える。 foreach (リスト) { # 要素へのアクセスは $_ でできる } じつはforと全く同じ(後述)。 while おなじみwhileループもあ…

ハッシュをリストとして扱ってみる

前回のエントリで、ハッシュを作るときの書式 my %hash = ('foo'=>42, 'bar'=>23, 'baz'=>3.14); が、リストを代入しているように見えて仕方が無い、みたいな話しをしたけど、それの続きっぽい感じで。じゃあ、%hashをリストとしてforeachにぶち込んでみると…

第5章「ハッシュ」

辞書の実装として用いられるハッシュをプリミティブなデータ構造として持っているのね。ミ・д・ミ ホッシュホッシュ ハッシュの作り方 my %map = ( 'foo' => 42, 'bar' => 23, 'baz' => 3.14, ); 値をカンマで区切るとリストになるという事は始めの方で知ったけど、 ('…

第4章の章末問題

面白そうだったのでやってみた。http://ideone.com/lhMlf 以下の文をspliceを使って書いてください。 push(@array, $item); splice(@array, $#array+1, 0, $item); $item = pop(@array); $item = splice(@array, $#array, 1); リストをスカラーコンテキスト…

sort関数について

数値で昇順にしたい場合、比較のためのコードの断片を書いたけど、それに関して。 このコードブロックは、引数なのか? 引数なら普通カンマで区切るよねー、ということで書いてみた。http://ideone.com/ndKeH my @nums = (31, 41, 59, 26, 53, 58, 9, 93); m…

第4章「配列とリスト」つづき

「配列とリストに関する関数」節ということで、しばらくは配列とリストで使える関数の紹介。 配列の要素を連結して文字列化 joinでできますよ、と。C#ではSystem.String.Joinメソッドがあるね。 my @score = (64, 90, 75); print join(',', @score), "\n"; …

二重引用符内の変数の展開に関して

二重引用符内に変数名があったら、展開してくれることはつい最近勉強した。たとえば、 my $n = 42; print "$n\n"; っていうコードがあったとき、ちゃんと42と改行文字を表示してくれるってことは、 現在の環境から識別子 $n を検索し、42という数値を見つけ…

配列の変な場所に要素を追加したらどうなるのかな?

PHPではインデックスに欠番ができるけど、Perlではどうなるか実験。 use strict; use warnings; my @nums = (1, 2, 3,); # 添字が9の場所に代入すると、添字の欠番ができる? $nums[9] = 10; my $len = @nums; print "length of array: $len\n"; foreach (@n…

第4章「配列とリスト」

ここら辺からペースダウンしよう。 スクリプト実行の際に スクリプトを写経して実行するときに重要そうなことが第1章に書いてあったのでまとめとく。 自分に厳しく ソースコードの先頭に use strict; use warnings; をつけると、処理系によるチェックが厳し…

第3章「条件判断」

第3章「条件判断」。これもサラッと。 ifの基本 中カッコを省略できない 他の多くの言語と同じく、if文、if-else文、if-elsif-else文が使える。else ifとかelseifじゃないので注意。 論理和演算にor演算子または||演算子が使える(働きは同じだけど、優先順…

第2章「数と文字列」

第1章は割愛。第2章はサラッと。 数と変数 変数名の先頭には$がつく printを使うと、標準出力に出力できる 変数を初めて使うときにはmyをつける =演算子を使うと、右辺を左辺に代入できる 変数名は何を表しているか分かりやすいように決めよう #から行末ま…

Perl入門開始

2012年2月某日に id:sakurako_s さんが「Yamaguchi.pm準備会」なるイベントをやるそうで、それに参加するためにPerlに入門してみようかな、みたいな。 電脳書房さんで以下の書籍を約1,600円で購入。綺麗でほとんど新品だったよ。お安い!新版Perl言語プログ…