2009-10-01から1ヶ月間の記事一覧

mapで繰り返し処理を短縮・追記

サブルーチンを使わずに、さらに短縮してみる。 my %table_hash = map{ my $name = $_; my $fh; open $fh, '; close $fh; map { $_ =~ s/[\r\n]$//g } @text; $name => [ map{ [split(',', $_)] } @text ]; } ('a', 'b');

mapで繰り返し処理を短縮

カンマ区切りデータをまとめる map不使用 my $fh; my @table; my $table_hashref = {}; open $fh, ') { $line =~ s/[\r\n]$//g; my @record = split(',', $line); push @table, \@record; } $table_hashref->{'a'} = \@table; open $fh, ') { $line =~ s/[\r…

PerlでShiftJIS::Regexpモジュールを使う際の注意点

2バイト文字のコードにエスケープ文字コード「0x5c」(¥または\)が含まれるいわゆる「ダメ文字」をマッチングパターンに使う際、文字データをそのまま使うと意図したマッチング結果にならない場合がある。 そこで、これを避けるためにマッチングパターンに含…

指定フォルダ内の重複ファイルを検出するプログラム

指定したフォルダ内の(サブフォルダ内も含む)全てのファイル名とサイズを取得し、同じサイズのファイル同士を比較して、内容が全く同じファイルを検出するPerlスクリプト。 UTF8用なので、ソースコードもUTF8にする必要がある。Shift-JISにする場合は、"¥"…

世界一変なプログラムコード

IOCCC(国際邪悪なCコードコンテスト) Perlについて調べてリンクを辿っていたらこんな記事を見つけた。 http://ja.wikipedia.org/wiki/IOCCC 記事より引用 IOCCCとは「The International Obfuscated C Code Contest(国際邪悪なCコードコンテスト)」の略称…

Perl正規表現の罠と罠はずし その3

文字列を複数行として扱う修飾子「m」を付けると、改行文字による行区切りの後を行頭、前を行末と見なすので、行頭・行末アンカーを置き換えなくてもそのまま使える。 $text = "12345\nABCDEFG\n12345\n"; print '=' x 10 . '(1-0)' . '=' x 10 . "\n"; prin…

Perl正規表現の罠と罠はずし その2

マッチングパターン「.」に改行文字を含める場合、マッチング修飾子「s」を用いるが、行末アンカー「$」を付けた場合に、キチンと行末(改行の前もしくは文字列の末尾)を認識するマッチングパターンは以下のようになる。 (?:(?:$)|(?=[\n])) 行頭・行末それ…

Perl正規表現の罠と罠はずし

改行文字を含む文字列をマッチング対象とし、改行文字もただの文字として扱う場合、オプションにsを付けるが、行頭アンカー(^)を付けた文字列をマッチングパターンにすると、うまくマッチングしない不具合が起こる。 そこで、行頭アンカーを"(?:(?:^)|(? my …