早くも無く遅くも無く。
ちょろり調べ事。
早くも無く遅くも無く。
Wings3Dの開発版 2.1.3が
出ているのに気づいたり。いつもの如く
64bit版で1500万ポリゴンのAsianDragon(WavefrontOBJファイル)を
インポートしてみるのですが、Windowsがハング。ダメか。
でも、アイコンが描き変えられていたり、ウインドウのタイリングが
やり易くなってたり、細かい所の改良が加えられているようです。
早くも無く遅くも無く。
ちょろり調べ事。
AM中に起床。
洗濯したり掃除したり。
攻殻機動隊で、清掃員が嘘の記憶を刷り込まれるって話がありますが、
そういやゴミ収集作業自体はアンドロイドではなく人が行っているのに
理由あったっけ?と読み直してみたり。特に理由は無さげな模様。
ちょろりコーディング。
「舟を編む」のアニメを大分遅れて録画視聴してますが、
作中にブラウン管TVが出てきて あれ?そういう時代設定なんだっけ?
と思ったり。Wikipedia
によると映画では1995年という設定らしい。原作やアニメでの設定は
よく判りませんが、先のブラウン管TVから察するとそれくらいの
設定なのかな?と思ったりも。
カンナダ文字
という文字を知ったり。言語から知ったのではなく顔文字から知ったのですが(^^;
で、こんな感じってのを示したかったのですが、今の日記HTMLファイルを
UTF-8にすると半角罫線でレンダリングされて表示が死ぬので画像に屈してみたり。
因みにSAI2の20161119-64bit-jaの文字レンダリング機能で作成してみました。
訝しげな表情限定ですが。因みに「Nirmala UI」というフォントはWindows8以降
で標準インストールされているようです。以前
Emacsのview-hello-fileを表示するのに、特にフォントのインストールはしなくて
大丈夫な区画だったと記憶しています。
起きたら午後もいい時間。寝過ぎ。
そういや以前知った
「Buffalo buffalo Buffalo buffalo buffalo buffalo Buffalo buffalo.」
という英語の文言。今のGoogle翻訳だとどうなる?と思って試してみたり。
以下結果。
Translate from English to Japanese: Buffalo buffalo Buffalo buffalo buffalo buffalo Buffalo buffalo. Buffalo buffaloバッファローバッファローバッファローバッファローバッファ ローバッファロー。
Translate from English to Japanese: buffalo buffalo buffalo buffalo buffalo buffalo buffalo buffalo. バッファローバッファローバッファローバッファローバッファローバッファロー バッファローバッファローバッファローバッファローバッファローバッファロー バッファローバッファローバッファローバッファロー。
遅めに帰着。
MinGWのクロスgdcだとファイル読み込みが遅い?件。
どうも調べてみると読み込みではなく書き込みが遅いっぽい。
csvフォーマットの読み込みテストで、
string line ; while( (line=infile.readln()) !is null ){ auto flist = split( chomp(line), sep) ; foreach( f ; flist ){ write( f ~ ":" ) ; } write("\n"); }
string line ; while( (line=infile.readln()) !is null ){ auto flist = split( chomp(line), sep) ; string oline="" ; foreach( f ; flist ){ oline ~= f ~ ":" ; } write( oline ~ "\n" ) ; }
$ time ./csv_test.pl testdata1000000.csv > /dev/null real 1m27.046s user 1m26.030s sys 0m0.686s
早くも無く遅くも無く。
ちょろり調べ事。
起きたら午後もいい時間。寝過ぎ。
csvフォーマットのファイルを読み込むコードをperlで書いてみたの
ですが、D言語で同じものを書くと速くなるのか?というのを試して
ました。結果は微妙(^^;
D言語とperlはそれぞれ以下のような感じ。','区切りの行を読み込んで
splitで配列にバラしたあと、繋いでSTDOUTに出力するという、
ベンチマーク目的の役に立たないコードです。
$ cat csv_test.d #D言語コード import std.stdio; import std.string; import std.regex; int main(string[] args) { if( args.length==1 ) args ~= "-" ; auto sep = regex(",") ; foreach( fname ; args[1..$] ){ File infile ; if( fname != "-" ){ infile = File(fname) ; }else{ infile = stdin ; } string line ; while( (line=infile.readln()) !is null ){ auto flist = split( chomp(line), sep) ; foreach( f ; flist ){ write( f ~ ":" ) ; } write("\n"); } } return(0) ; } $ cat csv_test.pl #perlコード #!/bin/perl use strict; if( $#ARGV<0 ){ push(@ARGV,"-") ; } foreach my $fname (@ARGV){ open(INFILE, $fname); while(<INFILE>){ chomp; my @flist = split(/,/,$_) ; foreach my $f (@flist){ print "$f",':' ; } print "\n" ; } close(INFILE) ; }
gawk 'BEGIN{l="";for(i=0;i<200;i++){l=sprintf("%s%d,",l,i);}for(i=0;i<1000000;i++){printf("%d,%s\n",i,l);}}' > testdata1000000.csv
$ gdc -v Using built-in specs. COLLECT_GCC=gdc COLLECT_LTO_WRAPPER=/usr/local/gdc_2068_620/libexec/gcc/x86_64-pc-linux-gnu/6.2.0/lto-wrapper Target: x86_64-pc-linux-gnu Configured with: ../gcc-6.2.0/configure --with-pkgversion='gdc-6 521be11f82(DMD2.068)' --enable-languages=c,c++,d --prefix=/usr/local/gdc_2068_620 --disable-bootstrap --disable-nls --with-bugurl=http://bugzilla.gdcproject.org --enable-checking=yes --disable-libgomp --disable-libmudflap --disable-libsanitizer Thread model: posix gcc version 6.2.0 (gdc-6 521be11f82(DMD2.068))
$ gdc -O2 csv_test.d -o csv_test_nofrelease $ gdc -O2 -frelease csv_test.d -o csv_test_frelease $ time ./csv_test.pl testdata1000000.csv >/dev/null real 0m39.621s user 0m38.532s sys 0m0.191s $ time ./csv_test_nofrelease testdata1000000.csv >/dev/null real 0m39.746s user 0m38.732s sys 0m0.320s $ time ./csv_test_frelease testdata1000000.csv >/dev/null real 0m34.256s user 0m33.424s sys 0m0.256s
$ cat csv_test.java import java.io.*; class CsvTest { public static void main( String[] args ) { for( String fname : args ){ try{ BufferedReader infile = new BufferedReader( new FileReader( fname ) ); String line; while( (line = infile.readLine()) != null ) { String flist[] = line.split( "," ); for( String f : flist){ System.out.print( f + ":" ) ; } System.out.print("\n") ; } infile.close() ; } catch( IOException e ) { System.out.println( "in/out error" ); } } } }
$ javac -version javac 1.8.0_111 $ java -version openjdk version "1.8.0_111" OpenJDK Runtime Environment (build 1.8.0_111-b16) OpenJDK 64-Bit Server VM (build 25.111-b16, mixed mode) $ javac csv_test.java $ time java CsvTest testdata1000000.csv > /dev/null real 1m33.623s user 1m6.838s sys 0m25.528s
早くも無く遅くも無く。今朝は津波警報の報道しかしてなくて何がなんだかでした。
そういやFedora24にしてからgdcのビルドを行っていなかったのですが、
行ってみたら何故かconfigureが通らなくなっていたり。
gccとglibcのインストールが何やらうまくいってないようだったのですが、
それでも何故かダメで、最後にi686向けのlibstdc++を入れ直してやっと
通るようになったり。てか、g++がインストールされている時点でlibstdc++
も入るんじゃないのか?と思ったのですが違うみたい。
ひとまず実績のあるバージョンでgdcのビルドに成功。
早くも無く遅くも無く。
ちょろり調べ事。納得いかない結果に。
AM中に起床。
掃除したり洗濯したり。
先日知ったD言語でのソートの仕方を使って、練習も兼ねて試しにcoreutilsの
sortコマンドっぽいものを作ってみたのですが、出来上がったものの結果とcoreutilsの
sortの結果とを比べると何やら違いがあったり。よく見てみると
coreutilsのsortって大文字小文字を区別していないようで、あれ?そうだっけ?
と思ったり。
$ (echo "bbb" ; echo "AAA" ; echo "aaa" ) | sort aaa AAA bbb $ (echo "bbb" ; echo "AAA" ; echo "aaa" ) | sort -f aaa AAA bbb $ sort --version sort (GNU coreutils) 8.25 パッケージ作成者: Cygwin (8.25-3) Copyright (C) 2016 Free Software Foundation, Inc. ライセンス GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. 作者 Mike Haertel および Paul Eggert。 $ (echo "bbb" ; echo "AAA" ; echo "aaa" ) | ./a.exe #D言語で作成したsortっぽいもの. 大文字小文字は区別する AAA aaa bbb
$ (echo "bbb" ; echo "AAA" ; echo "aaa" ) | sort AAA aaa bbb $ (echo "bbb" ; echo "AAA" ; echo "aaa" ) | sort -f AAA aaa bbb $ sort --version sort (GNU coreutils) 8.25 Copyright (C) 2016 Free Software Foundation, Inc. ライセンス GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. 作者 Mike Haertel および Paul Eggert。
昼前起床。寝過ぎ。
そういえば、TVの生中継で ラグ(レイテンシの遅延)の為にスタジオと中継先とで会話が
ぶつかったり、会話に隙間が生じたりする場合があります。
例えば 音と映像が向こう側に届くのに3秒かかるとすれば、会話の間に3秒の隙間が
生じるのは、まぁ仕方の無い事かもしれません。
で、テレビ東京の WBS(ワールドビジネスサテライト)を見ていると、海外のスタジオと
中継会話する場合があるのですが、ほぼラグが無く普通に会話できているのに驚きます。
専用回線だからか?と思ったりも。
先日観たNスぺの中でしていた「CGでやる」という言い方。
どうやらキャラクター含めて全編3DCGで制作する事を「CGでやる」と言い、
2D含めてデジタル化する事は「デジタルで....」と使い分けているなぁ?と
思ったり。
Web巡回していて見つけた動画
(
【爆笑】ネットで買った商品と服の理想と現実の違いがおもしろすぎ 通販の失敗写真比較が面白いwww 【違い過ぎだろwww】)。
大分詐欺まがいなのもあるのだなぁと思ったりも。
D言語で構造体配列の、とあるメンバー変数をソートキーにしてソートを
行いたいと思ったのですが、イマイチ方法がよく判らなかったり。
opCmp()というメンバー関数を定義しておけば、C言語のqsort()の
様にソート関数を指定できるというイメージだと思われるのですが、
何故か説明が雑で且つコードの例もありません。実際にopCmp()
を定義してコンパイル&実行すると
object.Error@(0): TypeInfo.compare is not implemented ---------------- 0x71016550 in StackWalk64 0x70f4cbf0 in SymGetOptions 0x70f4c7e0 in SymSetOptions 0x71003d20 in SymFunctionTableAccess64 0x71003fb0 in SymGetLineFromAddr64 0x710041f0 in SymGetModuleBase64 0x71004290 in SymGetModuleInfo64 0x71004cf0 in SymGetSymFromAddr64
1 import std.stdio; 2 import std.string ; 3 4 struct lineinfo { 5 string str ; 6 int n ; 7 8 int compare(ref const lineinfo li){ 9 writef("li.n=%d this.n=%d\n",li.n,this.n) ; 10 return(this.n - li.n) ; 11 } 12 } ; 13 14 int main() 15 { 16 lineinfo[3] li = [ {str:"bbb",n:2}, {str:"aaa",n:3}, {str:"ccc",n:1} ] ; 17 18 writef("%s\n",li) ; 19 20 li.sort ; 21 22 writef("%s\n",li) ; 23 24 return(0) ; 25 } $ i686-pc-mingw32-gdc -O2 key_sort.d $ ./a.exe [lineinfo("bbb", 2), lineinfo("aaa", 3), lineinfo("ccc", 1)] [lineinfo("bbb", 2), lineinfo("aaa", 3), lineinfo("ccc", 1)]
1 import std.stdio; 2 import std.string ; 3 import std.algorithm.sorting; 4 5 struct lineinfo { 6 string str ; 7 int n ; 8 } ; 9 10 int main() 11 { 12 lineinfo[] li = [ {str:"bbb",n:2}, {str:"aaa",n:3}, {str:"ccc",n:1} ] ; 13 14 writef("%s\n",li) ; 15 16 li.sort!("a.n<b.n") ; 17 18 writef("%s\n",li) ; 19 20 return(0) ; 21 } $ i686-pc-mingw32-gdc -O2 key_sort.d $ ./a.exe [lineinfo("bbb", 2), lineinfo("aaa", 3), lineinfo("ccc", 1)] [lineinfo("ccc", 1), lineinfo("bbb", 2), lineinfo("aaa", 3)]
$ i686-pc-mingw32-gdc -O2 key_sort.d key_sort.d:16:5: error: template std.algorithm.sorting.sort cannot deduce function from argument types !("a.n<b.n")(lineinfo[3]), candidates are: li.sort!("a.n<b.n") ; ^ /usr/local/gdc_2068_620_mingwcross/lib/gcc/i686-pc-mingw32/6.2.0/include/d/std/algorithm/sorting.d:951:1: note: std.algorithm.sorting.sort(alias less = "a < b", SwapStrategy ss = SwapStrategy.unstable, Range)(Range r) if ((ss == SwapStrategy.unstable && (hasSwappableElements!Range || hasAssignableElements!Range) || ss != SwapStrategy.unstable && hasAssignableElements!Range) && isRandomAccessRange!Range && hasSlicing!Range && hasLength!Range) sort(alias less = "a < b", SwapStrategy ss = SwapStrategy.unstable,
早くも無く遅くも無く。
昨日付けでSAI2の新しいのが来ていたり。お疲れ様です。
あまりの眠さに急速停止。
遅めに帰着。
ちょろり調べ事。
遅めに帰着。
ちょろり調べ事。
遅めに帰着。
たまたまザッピングした時に
NHKスペシャル「終わらない人 宮崎駿」
てのを放送してたり。面白かったです。
最初のカットで上手く行かないと全てが終わるくらいの感じって
え?そんなに?!と思いましたが、そういうものなのかも。
遅めに帰着。
Web巡回して終了。
昼過ぎ起床。
掃除したり洗濯したり。
以前、SayaというCGキャラクター
を知ったのですが、その後も改良が行われていて、最近では動くようにもなっていたらしい
(公式
,関連記事)。
関連記事の方に示される動画の方はほんのちょっと、しかも
CEATEC(Combined Exhibition of Advanced Technologies;IT技術の国際展示会)
で展示されていたものをビデオ撮影したものなので、
絵的にどれほどのものか(止め絵は大丈夫だけど動くとダメとか)までは判らず。
近所に何かしら建設中の建物があるのですが、どうやらセブンイレブンの
新店舗ができる模様。家から一番近いコンビニになりそう。
起きたら午後もいい時間。寝過ぎ。
SAI2の新しいのが来ていたのに気づいたり。お疲れ様です。
アオイホノオのドラマが放送されていた時に
「アオイホノオ 11のひみつ」
という岡田斗司夫氏の番組連動ブログが掲載されていたのを今頃知ったり。
その中の第7話に対応するエントリ
で、
「紙の上に大きな丸を描いて、中央に十字を描く。これは「昭和の時代のマンガ描き方」であり、
現代のマンガ家なら、まずこういう描き方はしない。」
という一文があったのですが、え?そうなの?と思ったり。
以前、WiFiルータの転送速度を調べたとき、
CC2とPS3を2.5GHz帯で接続して両方でDLNA経由の動画を再生すると帯域が折半されて
転送速度が下がり、再生が途切れるという状況になりました。
その後、WiFi接続のBlu-rayドライブとCC2を5GHz帯での接続に移行した
のですが、そういや同時に2.5GHz帯での接続も行うとどうなるのだろう?
と思ったり。結果から言うと、2.5GHz帯を折半していた時のような
速度低下は起こりませんでした。
┌────┐ ┌───┐ ┌───┐ ┌────┐ │Blu-ray │ │ CC2 │ │PS3 │ │DESKTOP │ │ドライブ│ └─┬─┘ └─┬─┘ │DLNA-svr│ └─┬──┘ ↑(WiFi:5GHz;11ac) ↑(WiFi:2.5GHz) └─┬──┘ ↓(USB) └───────┐ │ ↓ ┌─┴───┐ ┌┴──┴┐ │ │ワイヤレス│ │↑ ↑│ │ │ドック ├─→(WiFi:5GHz;11n) →┼┘ └┼←(有線LAN:Gbit)┘ └─────┘ └────┘ WiFiルータ
遅めに帰着。
そういやPS3発売から丁度10年か。
Google英日翻訳がニューラルネット機械翻訳になって翻訳精度が
上がったらしい。以前、Google翻訳だけ
誤訳している一文があったのですが、前のような間違いはしなくなってます。
原文 : I only sold ten cars, not fifteen. 2014年 5月Google翻訳 : 私は10の車ではなく、15を販売した。 2016年11月Google翻訳 : 私は15台ではなく、10台しか販売していませんでした。
遅めに帰着。
アメリカ大統領選。トランプに決まった訳ですが、その後アメリカ
国内でもゴタゴタしてるのが不思議な気も。
だって、決めたのはアメリカ国民なのじゃないんだっけ?
遅めに帰着。
先日のCC2のスリープ復帰の件。もしかしてこういう事かも。
電源オプションに「スリープ解除タイマーの許可」という設定があります。
デスクトップPCでは一つしか設定が無いのですが、
CC2ではバッテリー駆動時と電源駆動時のそれぞれで有効/無効が設定可能に
なっています。実際の設定は「バッテリー駆動時は無効」、「電源駆動時は重要な場合のみ有効」
という設定になってました。で、ここからが推測するメカニズム。
電源駆動状態でスリープに入り、その後でアダプタケーブルを外して
バッテリー駆動にしてました。つまり、スリープに入った時には
電源駆動なので復帰が許可されています。その状態でバッテリー駆動に
切り替えても、CPUは寝ているのでフラグは電源駆動のままなのでしょう。
この為、バッテリー駆動にしているつもりにもかかわらずスリープ
復帰したという流れなのかなと推測しました。
バッテリー駆動にしてからスリープに入れば「バッテリー駆動時は無効」が
活きる事になるのだろうと思われます。
てか、稼働中は電源駆動で、スリープ中はバッテリー駆動にするって、
普通の使い方と逆じゃね?と今思った(^^;
遅めに帰着。
朝起きるとCC2がスリープ復帰していたり。今までこんな事無かったのですが
イベントログを見てもスリープの解除元が不明で原因判らず。
遅めに帰着。
アオイホノオ(16)。そういやあのサインのシーンって原作の方が後追い
になるのか。
夜更かしが過ぎて起きたら午後もいい時間。
掃除したり洗濯したり。
拙作のELISPであるところのwindow-plus
ですが、除外ウインドウを一つだけ表示していると補完候補バッファなど
のウインドウが開かないという問題があったので直してみたり。
途中激しく壊したりしてすったもんだしましたが、なんとなく
着地できた気が。そんな感じで
「Emacsでアクセサリを表示してみたくなった」
を更新してみました。御参考まで。
AM中に起床。
まだWiFi子機の話。通信が無い状態でほっとくといつの間にか接続が切れていたり。
手動でまた繋いだ後、ちょっと目を離すとまた切れるという状況。
再度接続する際にデバイス自体が見えてない状態だったので、
もしかしてデバイスの電源が切れているのか?と思ったり。
これについてもWeb検索したところ
こちらのような
ページが見つかったのですが、更に切り分けていくと 我が家のはどうやら
USBの省電力制御が原因でした。
「USBのセレクティブサスペンドの設定」
(参考)
をバッテリ駆動時も電源接続時も両方とも有効になっていたのを無効に
変更する事で切れる事は無くなりました。
でもこれ、USB電源をOFFにされるとUSB充電とかできないのでは?とは思ったりも。
それにしても、ハマるもの全てにハマった感じです。WiFi敷居高ぇ.....
早くも無く遅くも無く。
WiFi子機の5GHz接続でスピードが出ない件。Webを検索してみると
こちらのぺージ
に同じ現象が起こった話があり、ドライバのアップデートで改善した
というのを知ったり。そもそもドライバのインストールから始めて
いるので、古いなんてこと無いハズなのだが?と思いながらも、
「コンピュータの管理→デバイスマネージャ内のネットワークアダプタ」
から件のWI-U3-866Dを探し、ドライバの更新を試してみたところ、
新しいドライバが見つかってインストールされました。えぇぇ〜〜〜〜?
再起動後、11acで接続してデスクトップPCからファイル転送を行って
みたところ、250Mbps出たのでOK。なんてこった。
で、Blu-rayドライブのワイヤレス接続は以下のような感じに。
因みにデスクトップPCの位置も以下。
┌────┐ │Blu-ray │ ┌───┐ ┌────┐ │ドライブ│ │ CC2 │ │DESKTOP │ └─┬──┘ └─┬─┘ └─┬──┘ ↓(USB) ↑(WiFi:5GHz;11ac) ↓ ┌─┴───┐ ┌─┴──┐ │ │ワイヤレス├─→(WiFi:5GHz;11n) →┤WiFi ├←(有線LAN:Gbit)┘ │ドック │ │ルータ │ └─────┘ └────┘
ゴミ捨ての為にAM中に起床。
ちょろりお出かけ。そして散財。
CC2ではBlu-rayドライブが無いので欲しいかもと思っていたのですが、
USB接続はなんかウザいのでネットワーク経由でBlu-rayドライブを使えない
ものかと考えました。デスクトップPCのBlu-rayドライブをWindowsの
ファイル共有機能で見せただけではファイルシステムとしか認識されず、
物理ドライブとして見えないのでダメでした。そんな訳で
気になったのがPioneerの
BDR-WFS05Jという製品。ネットワーク越しにドライブを接続
できるというものだったので買ってみた次第です。
ついでにUSB接続可能な 5GHz対応のWi-Fi子機アダプタを使えば
5GHz帯の様子も見られるんじゃね?という事でBUFFALOの
WI-U3-866D
てのを買ってみました。てか、11acイケる製品ってあんま無いのね。
そんな感じなので、ちょっと高めの散財になったかも。
早速試したり。まずはBlu-rayドライブの方から。ドライブ自体は
USB接続も可能なので、ドライバ類はCD-ROMからインストール。
で、もにゃもにゃと接続設定を行って完了。専用の接続アプリが
必要ですが、繋いでしまうと USBにBlu-rayドライブを接続
したのと同じように見えます。
接続は以下のような感じです。
┌────┐ │Blu-ray │ ┌───┐ │ドライブ│ │ CC2 │ └─┬──┘ └─┬─┘ ↓(USB) ↑(WiFi:2.4GHz) ┌─┴───┐ ┌─┴──┐ │ワイヤレス├─→(WiFi:5GHz) →┤WiFi │ │ドック │ │ルータ │ └─────┘ └────┘
遅めに帰着。
ちょっこりWi-Fiルーターの転送速度を調べたり。CC2を買った当初はWindows10
へのアップデートで100Mbpsくらい出るのを確認していたのですが、
今日試してみると全然スピードが出なかったので何故だろう?と思ったり。
どうやらBluetoothのマウスとキーボードを使うようになったのですが、
BluetoothがONだとかなり激しく電波干渉するようで、ファイル転送が
途中で完全に止まる状態にまで悪化するケースがあるようです。
Bluetoothを一時的にOFFにするとそれを契機に100Mbps前後まで
回復&維持できる模様。
CC2とPS3で同時に動画を再生させてみたり。CC2では4K動画、PS3ではFull-HD動画
を再生してみたのですが、この場合も転送速度が下がります。
2.4GHzの周波数を折半するので当たり前ですが。5GHz帯だと
どうなるのか興味のある所ですが、対応デバイスが無いのでなんとも。
遅めに帰着。
PS4ソフトの発売予定を眺めていたら
「ボコスカウォーズ2」が並んでいて、
はぁ?!と思ったり。もう少しWebで調べてみると、2015年5月頃にアナウンスは
あったっぽい。それにしても、以前、
「燃えプロ」が発売されたのですが、ちょいちょい来る
変化球は何?と思ったりも。いいけど。
perlの正規表現を最適化する
Regexp-Assembleというperlモジュールの存在を知ったり。
perlで複数の単語にマッチする正規表現を
「foo|bar|hoge|fuga」てな感じで「|」で繋ぐと、見た目は
判りやすいですが、非常に遅いとされています。
で、Regexp-Assembleを使用するとそれを良い感じに展開して
くれるという事らしいです。
試しに以下のようなコードを書いてみました。
#!/bin/perl use strict; use Getopt::Std; use Regexp::Assemble; my $ra_mode=0 ; my %opts ; getopts('a'=>\%opts); if( $opts{"a"} ne "" ){ $ra_mode=1 ; } my $regstr="" ; my $regasm=Regexp::Assemble->new; my $fname = $ARGV[0] ; open(INFILE, $fname); while(<INFILE>){ chomp ; $regstr=$regstr . sprintf("|^%s",$_) ; $regasm->add(sprintf("^%s",$_)) ; } close(INFILE) ; $regstr =~ s/^\|// ; if( $ra_mode==0 ){ my $match_count=0 ; open(INFILE, $fname); while(<INFILE>){ if( /$regstr/ ){ $match_count++; } } close(INFILE) ; printf("Normal match count = %d\n",$match_count) ; }else{ my $match_count=0 ; open(INFILE, $fname); while(<INFILE>){ if( $_ =~ $regasm->re ){ $match_count++; } } close(INFILE) ; printf("RegexAssemble match count = %d\n",$match_count) ; } exit(0) ;
$ time ./regasm_test.pl /usr/share/dict/words Normal match count = 479832 real 42m38.904s user 42m33.453s sys 0m0.202s $ time ./regasm_test.pl -a /usr/share/dict/words RegexAssemble match count = 479832 real 0m30.625s user 0m30.421s sys 0m0.155s