2010-05-01から1ヶ月間の記事一覧

File::Temp〜一時ファイルを保存するディレクトリと一時ファイルの名前を生成する。

画像をアップロードしてもらう、という処理なんかに有効です。画像アップロードの処理として、アップロードしてくれた画像を一時ファイルとして保存して成形し、成形後に一時ファイルを消したいとします。そんな時に役立つのがFile::Tempです。File::Tempは…

世にさらすサービスのコードでopenを使っているときに気をつけないといけないこと

例えば、jsonファイルをアップロードしてもらう仕組みを作ったとします。処理の流れは、受け取ったjsonファイルを一時ファイルとして保存し、ファイルopenしてごにょごにょと処理をするというものにしているとします。で、ファイルopenの部分を以下のように…

OSの影響を考えなくても改行コードを落とす方法〜正規表現

perlには、chopやらchompやら改行を落とす関数がありますが、これらは改行コードを落とすには不十分です。そこで、以下のように正規表現を使って書けば、どんな改行コードでも落とせちゃいます。 $line =~ s/[\r\n]+\z//;そもそも、なんでchopやchompでは役…

ディレクトリをサブバージョン管理に入れないコマンド

shell> svn pe svn:ignore ディレクトリsvn propset svn:ignoreでもできなくて、svn propedit svn:ignoreでもできなくて、これならできた。

useの種類

perlで、use strict;とかuse Data::Dumper;とかしますよね。useのあとに続く言葉に、大文字で始まったり小文字で始まったりといろいろなので、規則性を調べてみた。 useと書くときは、以下の3種類。 ■モジュールをnewするとき。 ■モジュールのメソッドをイン…

正規表現、ループ処理の練習〜タブ区切りの.txtを.csvにする。

最初に、このお題の私の回答を見てくれた先輩の言葉。 ● \ は、「エスケープに使用している」のか「そういう文字そのもの」なのか常に意識して考えなくてはならない。 ●dieが適切な部分に使えるかどうかで、どれくらいのperl使いなのか分かる。 ●プログラム…

無名配列、配列のリファレンスとデリファレンス、ループ処理の練習〜マトリックスを転置しよう

●お題 まず、自分で以下のような配列を作る。 1,2,3,4,5 6,7,8,9,10 11,12,13,14,15 16,17,18,19,20 21,22,23,24,25 作った配列を、以下のように転置する。 1,6,11,16,21 2,7,12,17,22 3,8,13,18,23 4,9,14,19,24 5,10,15,20,25 ●回答 #! /usr/bin/perl use …

ハッシュと正規表現、ループの練習〜ある一日のapachログを10分ごと、30分ごとにカウントしよう

準備物は、ある一日のapacheのログが書かれたファイルです。 そして、いきなり回答です。 #! /usr/bin/perl use strict; use warnings; use Data::Dumper; my %count10; #10分ごとのカウント my %count30; #30分ごとのカウント open(FH,'<access'); # accessはログのファイル while(my $data = <FH>){ chop($data); my </access');>…

正規表現(3)〜オプションと置換

とりあえずの更新3つめ。今日上げた他の2つの記事と合わせて、後日書き直します。 $s =~ /.+/ # '/' でなくてもよい。ただし、その場合は'm'を省略することができない。 $s =~ m/.+/ $s =~ m!.+! $s =~ m%.+% $s =~ m{.+} ### URL(例) ### $_ = 'http://www.…

正規表現(2)〜正規表現のオプションとsplitで正規表現を使う

理解してもらうということをまったく考慮していない記事ですみません。とりあえずの更新第2弾。こちらもあとで書き直します。 $s =~ /.+/ # '/' でなくてもOK $s =~ m/.+/; $s =~ m!.+!; $s =~ m%.+%; $s =~ m{.+}; ### URL(例) ### $_ = 'http://www.keyman…

正規表現(1)〜メールアドレスかどうか、URLかどうかをチェックする

とりあえずの更新をします。あとできれいに書き直しますー。 #正規表現はなるべく長くマッチしようとする '<a>aaa</a><b>bbb</b><c>ccc</c>' =~ />(.+) 'aaa</a><b>bbb</b><c>ccc' #最短一致=>+?もしくは*?を使用する。 '<a>aaa</a><b>bbb</b><c>ccc</c>' =~ />(.+?)</;#=>何かが1個以上連続したあとの一番最初に来る<にマッ…