//x; のように
すれば、// の間に改行できて、# の後ろにコメントが書ける 。
(?# ... ) でもコメント文になる。しかし、やはり、コメント文の
中に / が入ると、文法エラーになる。
perl -e '$a="abc";$a=~/(a)(?# comment / )bc/;'
|
GA | G | A / amL | S | おとなり | |
Effective Perl のメモは、たいへんよい 。
正規表現のコメント文は //x;のように すれば、// の間に改行できて、# の後ろにコメントが書ける
正規表現のコメント文は
//x; のように
すれば、// の間に改行できて、# の後ろにコメントが書ける 。
(?# ... ) でもコメント文になる。しかし、やはり、コメント文の
中に / が入ると、文法エラーになる。
perl -e '$a="abc";$a=~/(a)(?# comment / )bc/;'
use utf8のとき、split()は全角スペースも分割に使う
use utf8のとき、split()は全角スペースも分割に使う 。
#!/usr/bin/perl
use utf8;
binmode STDOUT => ":utf8"; # これがないと警告される
my $str ="全角 ス ペ ー ス が入った テキ\tス\nト";
print join(",", split(/\s/, $str), "\n");
実行結果: 全角,ス,ペ,ー,ス,が入った,テキ,ス,ト,
WindowsでPerl 5.8/5.10を使うためのファイルI/Oテンプレートソース 。
SH706iwと赤外線通信するため、Windows 用のPerlをインストールした
SH706iwと赤外線通信するため、Windows 用のPerlをインストールした 。
Strawberry Perlが新しい印象がしたけれど、Tkがインストールできない。
Windows上でg++を使ってコンパイルするらしいが、Tkにはいろいろ
ヘッダやライブラリがあるので、そんなものはTkのソースがないと
コンパイルがまったく通らないので無理。
ActivePerlは古いようだが、ちゃんとPerl 5.10.0のWin32バイナリがあるし、 32bitバージョンも64bitバージョンもあって、イチゴよりも強い感じがする。 また、ActivePerlのPPMはGUIが用意されていてたいへんわかりやすい。 また、ActivePerl 5.10.0 build 1004は、標準でTkxという、 簡易なTkが装備されているので、シンプルなUIを使いたいだけなら PPMをいじる必要もない。 しかし、ActivePerlのPPMは簡単なので、使わない手はない。
自宅サーバのマシンを変えて、CGIが軽くなった
自宅サーバのマシンを変えて、CGIが軽くなった 。
当然、CPUクロックが400MHzから900MHzになったのもある。が、
1秒以上かかっていたような処理も、0.5秒未満になったりして、
CPUだけではない要因がある。どうもディスクをフラッシュ化した
効果もあるらしい。今はOS環境がSSDで、webのコンテンツ関係は
すべて外部の4GB SDカード上にある。なので、SSDというわけではなく、
SSDよりも遅いフラッシュメモリカード上にデータがある、という
形だ。
Perl の DProf で実行時プロファイルをとって確認してみると、
$ dprofpp Total Elapsed Time = 0.371562 Seconds User+System Time = 0.371562 Seconds Exclusive Times %Time ExclSec CumulS #Calls sec/call Csec/c Name 10.7 0.040 0.040 1 0.0400 0.0400 utf8::AUTOLOAD 8.07 0.030 0.257 6 0.0050 0.0428 main::BEGIN 5.38 0.020 0.039 6 0.0033 0.0065 Encode::BEGIN 5.38 0.020 0.059 5 0.0040 0.0118 Storable::BEGIN 5.38 0.020 0.029 7 0.0028 0.0042 IO::File::BEGIN 5.38 0.020 0.020 37 0.0005 0.0005 utf8::SWASHNEW 5.11 0.019 0.095 1 0.0190 0.0951 main::doConvert 4.84 0.018 0.017 191 0.0001 0.0001 Encode::utf8::decode_xs 2.69 0.010 0.010 1 0.0100 0.0100 POSIX::AUTOLOAD 2.69 0.010 0.010 4 0.0025 0.0025 AutoLoader::import 2.69 0.010 0.010 3 0.0033 0.0033 vars::BEGIN 2.69 0.010 0.010 3 0.0033 0.0033 Exporter::as_heavy 2.69 0.010 0.010 3 0.0033 0.0033 POSIX::SigRt::BEGIN 2.69 0.010 0.010 8 0.0012 0.0012 warnings::import 2.69 0.010 0.010 2 0.0050 0.0050 main::getEntryParam
$ dprofpp Total Elapsed Time = 0.414425 Seconds User+System Time = 0.334425 Seconds Exclusive Times %Time ExclSec CumulS #Calls sec/call Csec/c Name 11.9 0.040 0.040 1 0.0400 0.0400 utf8::AUTOLOAD 5.98 0.020 0.020 5 0.0040 0.0039 IO::Seekable::BEGIN 5.98 0.020 0.039 6 0.0033 0.0065 Encode::BEGIN 5.98 0.020 0.069 5 0.0040 0.0138 Storable::BEGIN 5.98 0.020 0.039 7 0.0028 0.0056 IO::File::BEGIN 5.98 0.020 0.059 8 0.0025 0.0073 encoding::BEGIN 5.98 0.020 0.020 30 0.0007 0.0007 Encode::utf8::encode_xs 5.98 0.020 0.048 1 0.0198 0.0484 main::doCategoryPage 5.98 0.020 0.256 6 0.0033 0.0427 main::BEGIN 2.99 0.010 0.010 1 0.0100 0.0100 POSIX::AUTOLOAD 2.99 0.010 0.010 4 0.0025 0.0025 AutoLoader::import 2.99 0.010 0.010 3 0.0033 0.0033 vars::BEGIN 2.99 0.010 0.010 3 0.0033 0.0033 Exporter::as_heavy 2.99 0.010 0.010 2 0.0050 0.0049 DynaLoader::BEGIN 2.99 0.010 0.010 2 0.0050 0.0050 base::import ということでStorableだけ、使う関数に限定してロードしたところ、 dprofppのトップ15に出ないか、出ても順位が下がった。
Total Elapsed Time = 0.344435 Seconds User+System Time = 0.344435 Seconds Exclusive Times %Time ExclSec CumulS #Calls sec/call Csec/c Name 14.5 0.050 0.256 6 0.0083 0.0427 main::BEGIN 11.6 0.040 0.040 1 0.0400 0.0400 utf8::AUTOLOAD 8.71 0.030 0.059 8 0.0037 0.0073 encoding::BEGIN 5.81 0.020 0.029 6 0.0033 0.0049 Encode::BEGIN 5.81 0.020 0.039 7 0.0028 0.0056 IO::File::BEGIN 5.81 0.020 0.020 7 0.0028 0.0028 POSIX::BEGIN 5.81 0.020 0.020 29 0.0007 0.0007 Encode::utf8::encode_xs 5.81 0.020 0.048 1 0.0198 0.0484 main::doCategoryPage 2.90 0.010 0.010 1 0.0100 0.0100 POSIX::bootstrap 2.90 0.010 0.010 1 0.0100 0.0100 IO::bootstrap 2.90 0.010 0.010 5 0.0020 0.0020 vars::import 2.90 0.010 0.010 3 0.0033 0.0033 Exporter::as_heavy 2.90 0.010 0.020 5 0.0020 0.0039 IO::Seekable::BEGIN 2.90 0.010 0.059 5 0.0020 0.0118 Storable::BEGIN 2.90 0.010 0.060 21 0.0005 0.0028 Exporter::import 不要な関数と、正規表現の宣言を消すと、10msぐらい早くなったかもしれない。 90回ほど、不要な読み込みをしていた関数を、メモリ上にキャッシュ したら、やはりトータルで10msぐらい早くなったかもしれない。 あと、やはり90回ぐらい不要な正規表現による文字列置き換えを 呼ばないようにしたら、やはり10msぐらい早くなったかもしれない。
Total Elapsed Time = 7.7591 Seconds User+System Time = 0.519100 Seconds Exclusive Times %Time ExclSec CumulS #Calls sec/call Csec/c Name 18.6 0.097 0.302 1 0.0974 0.3019 main::doConvert 17.1 0.089 0.089 357 0.0002 0.0002 Encode::utf8::encode_xs 7.71 0.040 0.040 89 0.0004 0.0004 main::parseEntry 7.51 0.039 0.038 134 0.0003 0.0003 Encode::utf8::decode_xs 5.78 0.030 0.030 17 0.0018 0.0018 utf8::SWASHNEW 5.78 0.030 0.039 6 0.0050 0.0066 Encode::BEGIN 3.85 0.020 0.020 3 0.0067 0.0066 Exporter::as_heavy 3.85 0.020 0.040 7 0.0028 0.0056 IO::File::BEGIN 1.93 0.010 0.010 1 0.0100 0.0100 AutoLoader::find_filename 1.93 0.010 0.010 1 0.0100 0.0100 IO::bootstrap 1.93 0.010 0.010 2 0.0050 0.0050 Tie::Hash::BEGIN 1.93 0.010 0.010 8 0.0012 0.0012 warnings::unimport 1.93 0.010 0.010 8 0.0012 0.0012 warnings::import 1.93 0.010 0.020 5 0.0020 0.0040 IO::Seekable::BEGIN 1.93 0.010 0.010 20 0.0005 0.0005 Exporter::import 上の処理は、最初にキャッシュを作る前の処理なので時間がかかっている。 また、キャッシュ前のため、http client端末に対して、生データを 送っているのだが、これが340KBぐらいある。圧縮すると1/10の48KB。 ということもあり、トータルとして遅いかもしれない。 doConvertという関数は450msぐらいあったのが、302msにまでなった (その先で呼び出した関数も含む, CumulS)。
上のような、「漢字の羅列の抽出」も、 PerlのUTF-8対応正規表現だと簡単にできる
上のような、「漢字の羅列の抽出」も、
PerlのUTF-8対応正規表現だと簡単にできる 。
/(?: [^\p{Han}]+ (\p{Han}+) )+ /x
久しぶりにperl_moduleを試す
久しぶりにperl_moduleを試す 。httpd内にperlインタープリタが
常駐しているイメージ。そのためメモリを食う。VIRTサイズで、
9MBのところが12MBに。実行時は16MBまで膨らむ。
実際の物理メモリ上のRSSサイズは、2.5MBのところが6MBぐらいになる。
CGIで実行すると、CGIプロセスだけで4MBぐらいあるので、
その分が上乗せされるイメージ。問題は、クロック400MHzというのも
あるのか、あまり速くなったように見えないところ。うぐぐ。
Perlのコメント文入りの正規表現内では、 コメント文内で / を使うと文法エラーまたは divided by 0
Perlのコメント文入りの正規表現内では、
コメント文内で / を使うと文法エラーまたは divided by 0 。
Perlの正規表現で、/x オプションを指定すると、正規表現内の スペース、タブ、改行は無視され、自由にスペースを入れたり 改行したり、インデントして記述でき、たいへんわかりやすい。 また、# に続けてコメント文も記述でき、これまたたいへん わかりやすい正規表現コーディングが可能になる。 が、正規表現内のコメント文内に / が現れると、 文法エラーになったり、0除算例外になったりするので注意。 0除算例外になる例: % perl -e '$a="abc";$a=~/(b) #/co /x;'
"man perlre" でGoogle検索したら自分の日記が 先頭候補になってしまった 。げげ。
日ごろ不思議に思っていることを書いてみる- 04.10.5 正規表現の先頭にある $ マークは
日ごろ不思議に思っていることを書いてみる - 04.10.5 正規表現の先頭にある $ マークは ?
/$\d+\.txt$/ とあるのは、正規表現の最後に /ms オプションがついていればよさそうな気もしたが、
/$\d+\.txt$/ms やはり正規表現最初の文字が ^ でないと、マッチしない。
/^\d+\.txt$/ms これなら、マッチする
Perlの配列の一部参照で、
|
Perlカテゴリ
1ページ >> [Googleガジェット]残IPv441.42
最近割当: 0.620783 (/9) [割当推移グラフ] 最近最大: 0.125000 (/11), BR, 20100303 ガジェット/RSSカテゴリのしぼり込み最新日記一覧
おすすめ
Linkers & LoadersELF/a.out/COFFなどの実行ファイルの構造の詳細、メモリとアドレスの再配置の仕組み、共有ライブラリの実現方法など。(2001年)
ハイパフォーマンスWebサイト - 高速サイトを実現する14のルールWebクライアントから見た、Webサイト高速表示のためのポイント。 14の各ルール内に、いくつかバリエーションもある。
プロフェッショナル・セキュリティ・レビューパソコン、無線LAN、電子署名などのPKI(電子証明書)の動向が よくまとまっている。(JNSA編集協力
PLANEX GW-NS300N2 802.11n無線LANカードLinux用ドライバがRalink社から配布 ( 関連記事)。 Linux上のWPA-PSKでもサーバレスで利用できて便利。
マスタリングTCP/IP RTP編「作りたくなる」本。マルチメディア制御の基礎もわかる、翻訳本とは わからないほどのこなれた日本語。
PENTAX Optio W30フィールドで気ままに撮影。機能豊富で奥様もOKな防水・防塵デジカメ
C/C++ セキュアコーディングC/C++言語で脆弱性のないコーディングのための基本テクニック。グーグル八分とは何か告発サイトがGoogleから締め出される現実と検索エンジンのありかたを問う。
無線通信とディジタル変復調技術64QAM, OFDM, CDMA などのデジタル無線変調の教科書
お魚かるた「あんこうは 大口 なんでも食べる」「ひらめの目は 左側」など、
No Place To Hide行動、職歴、財産など、あらゆる個人情報が収集され、売買される現実。 「隠れ場所なし」
Ethereal Packet Sniffingパケット解析の強力ツール Ethereal の紹介。マスタリングTCP/IP(IPv6編)IPv6 ルーティング、認証プロトコルもあり。組み込みを意識した本。
GANDHI - ガンジーインド独立の指導者、マハトマ・ガンジー怒涛の偉業をたどる。
アンナと王様[DVD]子供時代のチュラロンコン・タイ国王とイギリス人家庭教師の交流と葛藤をアジアの目から描く。
エニグマ[DVD]第二次大戦中に活躍したドイツの暗号器「エニグマ」の解読に挑む。 ハードウェアだけでもすばらしいユーザインターフェースが実現できる。リンク
Twitterでsshidaをフォローする
対応規格広告 | |||||||||||||||||||
|
お便りはこちらへ (sshida@gmail.com) |
見出し一覧は RSS で
|