2008-02-01から1ヶ月間の記事一覧

4.12 配列内の複数の要素を一度に処理する

# @ARRAYの先頭から$N個の要素を削除する @FRONT = splice(@ARRAY, 0, $N); # @ARRAYの末尾から$N個の要素を削除する @END = splice(@ARRAY, -$N); # shift2 sub shift2 (\@) { return splice(@{$_[0]}, 0, 2); } # pop2 sub pop2 (\@) { return splice(@{$_…

4.11 配列の要素を逆順にする

# 方法1 @REVERSED = reverse @ARRAY; # 方法2 foreach ($i = $#ARRAY; $i >= 0; $i--) { # $ARRAY{$i}に対する処理を書く }

4.10 一方の配列を他方の配列に連結する

push(@ARRAY1, @ARRAY2);

4.9 2つのユニークなリストの和、差、積を求める。

# 配列、ハッシュを初期化 @a = (1, 3, 5, 6, 7, 8); @b = (2, 3, 5, 7, 9); @union = @isect = @diff = (); %union = %isect = (); %count = (); ## 和集合と積集合を求める簡単な方法 foreach $e (@a) { $union{$e} = 1 } foreach $e (@b) { if ($union{$e…

4.8 一方の配列にあってもう一方にない要素を見つける

## 単純な方法 # @Aと@Bにはすでに要素が格納されている %seen = (); # @Bの要素を判定するためのルックアップテーブル @aonly = (); # 結果 # ルックアップテーブルの作成 foreach $item (@B) { $seen{$item} = 1 } # @Aにはあり、@Bにはない要素を検出 for…

4.7 リストからユニークな要素を抽出する

# 単純な方法 %seen = (); @uniq = (); foreach $item (@list) { unless ($seen{$item}) { # ここに到達したら、そのアイテムはユニークである。 $seen{$item} = 1; push(@uniq, $item); } } # 処理速度の速い方法1 %seen = (); foreach $item (@list) { pus…

4.6 リファレンスで配列を繰り返し処理する

# 方法1 foreach $item (@$ARRAYREF) { # $itemに対する処理を書く } # 方法2 for ($i = 0; $i <= $#$ARRAYREF; $i++) { # $ARRAYREF->[$i]に対する処理を書く }

レシピ4.5 配列を繰り返し処理する

# foreach ループを使用する foreach $item (LIST) { # $itemに対するループを使用する。 }

レシピ4.4 飛び飛びの要素を持つ配列を作成する。

配列ではなくハッシュを使用する。

レシピ4.3 配列のサイズを変更する

# $#ARRAYに値を設定する。 $#ARRAY = $NEW_LAST_ELEMENT_INDEX_NUMBER; # 最後の要素に対応する添字よりも大きい添字を使用して配列に値を代入すると、自動的に配列のサイズが変わる。 $ARRAY[$NEW_LAST_ELEMENT_INDEX_NUMBER] = $VALUE

レシピ4.2 リストをカンマ区切りで出力する

要素が二つ以上ある場合は、最後の要素の前にandを、要素が3つ以上ある場合は、要素と要素の間にカンマを挿入したい。 sub commify_series { (@_ == 0) ? '' : (@_ == 1) ? $_[0] : (@_ == 2) ? join(" and", @_) : join(", ", @_[0..($#_-1)], "and $_[-1]…

レシピ4.1 プログラム内でリストを定義する。

@a = ("quick", "brown", "fox"); @a = qw(Meddle not in the affairs of wizards.); @lines = (<< "END_OF_HERE_DOC" =~ /^\s*(.+)/gm); I sit beside the fire and think of all that I have seen, of meadow-flowers and butterflies and summers that ha…

調子が悪い

何か気分が乗らない今日この頃。いつも思うけど、検査フェーズが一番辛いなぁ。ま、いつも自由に仕事さしてもらってるから、このフェーズぐらいは辛さに耐えて仕事するかな。 いつも思う自分の悪い癖だけど、仕事は家に持ち込まないようにしているし、できて…

3.10 短時間だけスリープさせる

1秒に満たない短い時間、プログラムをスリープさせたい。 # 方法1 select(undef, undef, undef, $time_to_sleep); # 方法2 use Time::HiRes qw(sleep); sleep($time_to_sleep);

3.9 高精度タイマー

time関数は秒単位で時間を計測するが、それよりも細かい単位で時間を計測したい use Time::HiRes qw(gettimeofday); $t0 = gettimeofday(); ## ここに任意の処理を書く $t1 = gettimeofday(); $elapsed = $t1 - $t0; # $elapsedには、$t1と$t0の秒差が浮動小…

3.8 日付や時刻をわかりやすい形式で出力する

localtime(); # => Wed July 16 23:58:36 2003

3.7 文字列を解析して日付と時刻を取得する

任意のフォーマットで指定された日付、時刻を、年、月などを単位とした個々の値に変換したい。 # 方法1 use Time::Local; # $dateには、YYYY-MM-DD形式の値(例えば2003-02-13)が格納されている ($yyyy, $mm, $dd) = ($date =~ /(\d+)-(\d+)-(\d+)/); # 抽出…

3.6 日付が何日目かを求める

エポック秒、または、年、月、日で表された日付が何曜日か、月の初めの日から何日目か、年の初めから何日目かを求めたい。 # 方法1 ($MONTHDAY, $WEEKDAY, $YEARDAY) = (localtime $DATE)[3,6,7]; $WEEKNUM = int($YEARDAY / 7) + 1; # 方法2 use Date::Calc…

advantage Lucy

久々にiTunes Music Storeを見ていると、advantage Lucyのアルバムが配信されていました。Echo Parkアーティスト: advantage Lucy出版社/メーカー: Solaris Records発売日: 2005/09/28メディア: CD購入: 1人 クリック: 10回この商品を含むブログ (101件) を…

Matrix

どんなストーリーやったんかなぁ、ってことで、久々にマトリックスを見てみました。ストーリーは、100年後の世界で、コンピュータと人類が戦争をしている、と言うもの。で、主人公たちは、コンピュータが作り出した仮想空間マトリクスの中で、刺客たちと戦い…

かゆそう...

やっぱ、アトピー体質は遺伝してるんかなぁ。顔中がすごいかゆそう。今は冬やし、まだ赤ちゃんやから、しょうがないんかなぁ。 大人になってから、ひどくならんかったらええんやけど。女の子なので、よけいにかわいそう。

3.5 2つの日付の差を求める

# 方法1 $seconds = $recent - $earlier

3.4 日付や時刻を加算/減算する

$when = $now + $difference $then = $now - $difference

3.3 エポック秒をDMYHMS形式の値に変換したい

# 方法 ($seconds, $minutes, $hour, $day_of_month, $month, $year, $wday, $yday, $isisdst) = localtime($time);

3.2 DMYHMS形式の値をエポック秒に変換する

use Time::Local; $time = timelocal($sec, $min, $hours, $mday, $mon, $year); $time = timegm($sec, $min, $hours, $mday, $mon, $year);

3.1 今日の日付を取得する

# 方法1 ($day, $month, $year) = (localtime)[3,4,5]; # 方法2 use Time::localtime; $tm = localtime; ($day, $month, $year) = ($tm->mday, $tm->mon, $tm->year);

2.17 正しい複数形を出力する

printf "It took %d hour%s\n", $time, $time == 1 ? "" : "s"; printf "%d hour%s %s enough.\n", $time, $time == 1 ? "" : "s", $time == 1 ? "is" : "are";

2.16 数値の位取りのカンマを挿入する

sub commify { my $text = reverse $_[0]; $text =~ s/(\d\d\d)(?=\d)(?!\d*\.)/$1,g; return scalar reverse $text; }

2.15 2進数、8進数、16進数を10進数に変換する

# Any -> 16進数 $num = hex($hexadecimal) # Any -> 10進数 $number = oct($hexadecimal) $number = oct($octal) $number = cbt(Abinaly)

2.14 複素数を使用する

use Math::Complex; my $a = Math::Complex->new(3,5); my $b = Math::Complex->new(2,-2) my $c = $a * $b;