2011-12-01から1ヶ月間の記事一覧
文字クラスとして、[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…
ある部分文字列を検索(または置換など)したい場合に、探したい文字列をパターンによって指定できる。その指定するパターンのことを正規表現と呼ぶ。 Perlでは、正規表現は /hoge/ のように、スラッシュで囲んで表現する。で、このパターンを演算子=~と組み…
foreach, while, forという3種類の繰り返しの構文について見てきた。これ以外にも繰り返しの構文(じゃないものも含む)があるらしい。 do until文、do while文(p163) 他の言語にもdo while文は見たことがあるね。条件判断をループの最後で行うパターン。…
これまでforeachはやってきたけど、その他にもいくつか繰り返しのための構文がある。 foreach リストに対して次のような形で使える。 foreach (リスト) { # 要素へのアクセスは $_ でできる } じつはforと全く同じ(後述)。 while おなじみwhileループもあ…
前回のエントリで、ハッシュを作るときの書式 my %hash = ('foo'=>42, 'bar'=>23, 'baz'=>3.14); が、リストを代入しているように見えて仕方が無い、みたいな話しをしたけど、それの続きっぽい感じで。じゃあ、%hashをリストとしてforeachにぶち込んでみると…
辞書の実装として用いられるハッシュをプリミティブなデータ構造として持っているのね。ミ・д・ミ ホッシュホッシュ ハッシュの作り方 my %map = ( 'foo' => 42, 'bar' => 23, 'baz' => 3.14, ); 値をカンマで区切るとリストになるという事は始めの方で知ったけど、 ('…
面白そうだったのでやってみた。http://ideone.com/lhMlf 以下の文をspliceを使って書いてください。 push(@array, $item); splice(@array, $#array+1, 0, $item); $item = pop(@array); $item = splice(@array, $#array, 1); リストをスカラーコンテキスト…
数値で昇順にしたい場合、比較のためのコードの断片を書いたけど、それに関して。 このコードブロックは、引数なのか? 引数なら普通カンマで区切るよねー、ということで書いてみた。http://ideone.com/ndKeH my @nums = (31, 41, 59, 26, 53, 58, 9, 93); m…
「配列とリストに関する関数」節ということで、しばらくは配列とリストで使える関数の紹介。 配列の要素を連結して文字列化 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…
ここら辺からペースダウンしよう。 スクリプト実行の際に スクリプトを写経して実行するときに重要そうなことが第1章に書いてあったのでまとめとく。 自分に厳しく ソースコードの先頭に use strict; use warnings; をつけると、処理系によるチェックが厳し…
第3章「条件判断」。これもサラッと。 ifの基本 中カッコを省略できない 他の多くの言語と同じく、if文、if-else文、if-elsif-else文が使える。else ifとかelseifじゃないので注意。 論理和演算にor演算子または||演算子が使える(働きは同じだけど、優先順…
第1章は割愛。第2章はサラッと。 数と変数 変数名の先頭には$がつく printを使うと、標準出力に出力できる 変数を初めて使うときにはmyをつける =演算子を使うと、右辺を左辺に代入できる 変数名は何を表しているか分かりやすいように決めよう #から行末ま…
2012年2月某日に id:sakurako_s さんが「Yamaguchi.pm準備会」なるイベントをやるそうで、それに参加するためにPerlに入門してみようかな、みたいな。 電脳書房さんで以下の書籍を約1,600円で購入。綺麗でほとんど新品だったよ。お安い!新版Perl言語プログ…
前回 のForEachDetailを、外部イテレータからも利用できるためには、外部イテレータが「現在の値」を取得できるようにしないとダメ。2分木のイテレータに関して再開 - チキン煮込みチーズミックス4辛 からは内部イテレータだけに話を絞っていたので、ForEach…
ForEachDetailLeftとForEachDetailRightを単純に組み合わせてできるわけじゃなかった。だけどヒントにはなった気がする。やり方は違うけど、結果的に 木構造の外部イテレータ - チキン煮込みチーズミックス4辛 となんか似てる。何がって言われてもよくわから…
できたっぽい?こんな感じ。 /// <summary>左と自分を処理する</summary> static void ForEachDetailLeft( TreeNode<T> root, Action<T> action, JobHolder holder) { // nodeを根として、最小のノードまで進む TreeNode<T> n = root; while (n._left != null) n = n._left; // そこから</t></t></t>…
難しい原因は、 左の部分木を走査 自分の値を走査 右の部分木を走査 という感じで、再帰する部分が2ヶ所あることだと思う。ということで、まずは、 左の子を無視して、自分→右の子と走査する という感じで、ものすごく簡単にしてみた。するとこうなる。 /// <summary></summary>…
木構造の内部イテレータでつまづいている話の続き。木構造で考える前に、配列で考えていたので、それに戻ってみる。配列をラップしたMyArrayクラスのソースコードは以下の通り。 class MyArray<T> : IIterableIn<T> { T[] _ar; public MyArray(T[] ar) { _ar = ar;</t></t>…
数か月放置していたこのテーマ。またこの数日考え始めたけど、まだ解決してない。yield returnで2分木の外部イテレータ作れたから、考える意味なくなったけど。いや!意味がないはずはない。どこかで役に立つはず!NextJobSetterやNextJobAccessorは、次に行…
yield return - チキン煮込みチーズミックス4辛 で、できないとか言ってたけどできるやんけ。なんでこんな事思いつかんのじゃ...。 // NodeクラスのGetEnumeratorだけ抜粋 public IEnumerator<int> GetEnumerator() { if (_left != null) { foreach (int n in _le</int>…
次の仕事も決まらないままに、仕事を辞めてしまいました!僕の人生、どうなることやら。とりあえず、少し貯金があるので、すぐ生活に困るわけじゃないけど、健康保険とか年金とかどうにかしないといけない。どこに行けばいいのかな。市役所かな。てか無職の…