Perlコーディング初心者質問スレ Part 50
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/06/26(月) 00:46:38ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0488nobodyさん
2006/07/13(木) 01:04:37ID:???静的なhtmlをincludeするんじゃなくて、そこで普通にテンプレートを使えば
実質お望みの事ができると思うんだけど…。
0489nobodyさん
2006/07/13(木) 01:05:37ID:???いろいろ方法はあるだろうけど、全く別の CGI を呼ぶ 「いい方法」 というなら SSI が 「いい方法」 だと思うぞ。
0490nobodyさん
2006/07/13(木) 01:06:25ID:???0491nobodyさん
2006/07/13(木) 01:17:32ID:???パーミッション777のディレクトリだとmkdirできるのですが
755だとできません。777だとセキュリティ的に問題ですよね?
755のディレクトリ直下に新規ディレクトリを作成するにはどうしたらいいでしょうか?
0495487
2006/07/13(木) 02:29:43ID:aY2uz4D9知識不足で申し訳ないです。普通にテンプレートを使うとはどういうことでしょう?テンプレートでcgiを実行するようなものがあるんですか?
>> 489
SSIで試してみました。parent.cgiから読み取るのをchild.shtmlにしてその中で<!--#exec cmd="perl hoge.cgi" -->として実行してみました。
結果普通にchild.shtmlを見ると実行が確認できたのですが、parent.cgiの中でshtmlを読み込んでしまうとSSIが実行されないようでダメでした。
>>490
カウンターではありませんw
0496nobodyさん
2006/07/13(木) 02:50:05ID:???テンプレート使ってるってことは、そもそもCGIで動いてるんでしょ。
その場で動的なページ作ればいいだけでは。
テンプレートで静的なhtmlを読み込んで、
さらにそこからCGI叩いて動的なページを、、、なんて考える前に。
0497495
2006/07/13(木) 03:13:47ID:aY2uz4D9レスありがとうございます。
しかしそのテンプレートのhtmlの"ある部分"にCGIの結果を入れたいんですよ。そこはスタイルシート等で位置が厳密に決まっているのでその部分だけ元のparent.cgiでhoge.cgiを呼び出してってのは難しいんじゃないかと思ってます。
0498nobodyさん
2006/07/13(木) 03:25:44ID:???0499nobodyさん
2006/07/13(木) 06:06:02ID:???言いたい事はわかるが、
それはパターンマッチを必要とする条件じゃないのか?
ただの文字列を探すならindexしかないだろ。
0500nobodyさん
2006/07/13(木) 06:14:58ID:???皮をかぶってるかもしれないから、ソース見るかベンチ取るかしてみないと(ry
0501nobodyさん
NGNGふつーに簡単なベンチ取ったら
indexの方が2倍 速かったんですけど
当然っちゃー当然の結果やね
0502nobodyさん
2006/07/13(木) 06:32:39ID:???http://x68000.q-e-d.net/~68user/webcgi/search-1.html
0503457
2006/07/13(木) 07:33:25ID:???>>502
横レスだけどリンク先を良くよんだら?
search-2.cgi がせめて and 検索だったらいいんだけどリンク先は
アンフェアな比較だよ。(まあ、そういう目的で作ったんんじゃない
だろうけど)
以下は寝起きで確認したベンチマークのソース。
#!/usr/bin/env perl -w
#use strict ;
use Benchmark ;
my $str1 = ( 'a' x 30 ) . 'hoge' . ( 'a' x 10 ) ;
my $str2 = ( 'a' x 30 ) . ' hoge ' . ( 'a' x 10 ) ;
sub cont1(){ $str1 =~ /hoge/ }
sub cont2(){ $str2 =~ /hoge/ }
sub test_index1(){ index $str1, 'hoge' }
sub test_index2(){ index $str2, 'hoge' }
timethese 500000, { o0 => 'cont1' , o1 => 'cont2' , o2 => 'test_index1' , o3 => 'test_index2' } ;
================
Benchmark: timing 500000 iterations of o0, o1, o2, o3...
o0: 1 wallclock secs ( 1.66 usr + 0.01 sys = 1.67 CPU) @ 299401.20/s (n=500000)
o1: 2 wallclock secs ( 1.66 usr + 0.02 sys = 1.68 CPU) @ 297619.05/s (n=500000)
o2: 1 wallclock secs ( 1.43 usr + 0.01 sys = 1.44 CPU) @ 347222.22/s (n=500000)
o3: 1 wallclock secs ( 1.43 usr + 0.01 sys = 1.44 CPU) @ 347222.22/s (n=500000)
0504nobodyさん
2006/07/13(木) 07:46:36ID:???search-2 が and 検索であろうとなんであろうと、単純な index と正規表現
の速度比較のソースにはならんな。
0505nobodyさん
2006/07/13(木) 13:17:19ID:???>Perlはもしかしたらindexが正規表現ライブラリの
>皮をかぶってるかもしれないから
それは普通に考えてありえない…。
0507nobodyさん
2006/07/13(木) 16:04:15ID:???>>503 と同じようなのを書いてベンチ取った。
何度かやってみたが、変数に入れてもindexの方が速かった。
#!/usr/bin/perl
use Benchmark;
my $str1 = ('a' x 30) . 'hoge' . ('a' x 10);
my $str2 = ('a' x 30) . ' hoge ' . ('a' x 10);
sub test_reg1 { my $hoge = 'hoge'; $str1 =~ /$hoge/; }
sub test_reg2 { my $hoge = 'hoge'; $str2 =~ /$hoge/; }
sub test_index1 { my $hoge = 'hoge'; index($str1, $hoge); }
sub test_index2 { my $hoge = 'hoge'; index($str2, $hoge); }
timethese 500000, {
reg1 => 'test_reg1',
reg2 => 'test_reg2',
idx1 => 'test_index1',
idx2 => 'test_index2',
};
idx1: 1 wallclock secs ( 0.83 usr + 0.00 sys = 0.83 CPU) @ 602409.64/s (n=500000)
idx2: 0 wallclock secs ( 0.83 usr + 0.00 sys = 0.83 CPU) @ 602409.64/s (n=500000)
reg1: 1 wallclock secs ( 1.00 usr + 0.00 sys = 1.00 CPU) @ 500000.00/s (n=500000)
reg2: 0 wallclock secs ( 1.00 usr + 0.00 sys = 1.00 CPU) @ 500000.00/s (n=500000)
0509nobodyさん
2006/07/13(木) 16:38:50ID:???あー、ほんとだ。
でもね、検索対象のサイズを大きくするにしたがって逆転していくみたい。
my $str1 = ('a' x 10000) . 'hoge' . ('a' x 1000);
my $str2 = ('a' x 10000) . 'hage' . ('a' x 1000);
とかでやってみておくれ。 これは 11k だけど、うちの環境では 1k あたりから差がではじめた。
0511nobodyさん
2006/07/13(木) 17:29:16ID:???気になる人はよく考えるなり実験するなりして選択しろと
いうことか。
0512nobodyさん
2006/07/13(木) 17:33:49ID:???(オートマトン作らなくて良い)なんて事は無いし。
0513nobodyさん
2006/07/13(木) 19:41:52ID:???0515nobodyさん
2006/07/13(木) 20:09:12ID:IeuSyhG10516nobodyさん
2006/07/13(木) 20:52:55ID:???0517nobodyさん
2006/07/13(木) 21:53:37ID:???0518nobodyさん
2006/07/13(木) 21:58:11ID:???「それでもPerlは動いている」
0519nobodyさん
2006/07/13(木) 22:11:56ID:Ms2xB21uアクセス解析用のcgiで出力を上記のようにしています。
自分自身先日winXPのIE7のベータ版にブラウザを変えて、気付いたのですが、
キャッシュされてしまってページ間の移動時に思うように動作しないことがあります。
これはベータ版のバグかもしれませんが。普通はcgiファイルをキャッシュして読み込みを省略することはないと思うので。
それでキャッシュ対策のヘッダを付け加えたいのですが、
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="Tue, 20 Aug 1996 14:25:27 GMT">
これのPERLヘッダ?版はどう記述すればいいでしょうか?
宜しくお願いします。
0520nobodyさん
2006/07/13(木) 22:22:32ID:Ms2xB21uprint "Cache-Control: no-cache\n";
print "Expires: Thu, 01 Dec 1994 16:00:00 GMT\n\n";
一応こんな感じかなと思いますが、あってるのでしょうか?
http://www.gac.jp/article/index.php?stats=question&category=10&id=11811&command=msg
ここではどうやらNNにはこれでは残ってしまうように書いてあるのですが。
0522519
2006/07/13(木) 22:24:37ID:Ms2xB21u要は私の場合は戻るボタンが効かないように、ではなくて、
アクセス解析CGIがちゃんと動作することと、
チャットで使ってる、
<meta http-equiv="Refresh" content="15">
がちゃんと動作することなのですが。
0523519
2006/07/13(木) 22:25:35ID:Ms2xB21uありがとうございます。
その書き方がイマイチ自身がもてなかったので投稿して確認に参りました。
0524nobodyさん
2006/07/13(木) 22:26:24ID:???0525nobodyさん
2006/07/13(木) 23:13:19ID:???というエラーが出たんですが、これはどういうときに出るもんなんですか?
test.cgiの60行目で''と''が同じになってるよ(コピーされたとかじゃなくてな)
ってこと?意味が分かりません。
0526525
2006/07/13(木) 23:16:07ID:???59行目}elsif($action eq 'move'){
60行目&move;
61行目&move_complete;
62行目}elsif(......
0529nobodyさん
2006/07/14(金) 00:05:57ID:???この「temp」フォルダの中にある各フォルダの名前を$dirnameとしましょう。
各フォルダの中に、
{
$dirname
}
とだけ書かれた、「test.txt」という名前のファイルをそれぞれ新しく作りたいんです。
#!/usr/bin/perl
opendir DIR, "temp" or die "can't open temp\n";
@dir = map { -d "temp/$_" ? $_ : '' } readdir DIR;
foreach $dirname (@dir) {
chdir "./$dirname";
open OUT, ">test.txt" or die "can't create the file\n";
print OUT "{\n";
print OUT "$dirname\n";
print OUT "}\n";
close OUT;
chdir "..";
}
close DIR;
こんな感じにプログラムを書いてDOSプロンプトから実行したのですが何も起きません・・・
どうすればいいのか教えていただけないでしょうか?
0530525
2006/07/14(金) 00:20:17ID:???&move;を別の名前に変える動いた・・・なぜ??
逆に59行目の'move'を別の名前に変えただけでは同じエラーが。
0531nobodyさん
2006/07/14(金) 00:26:19ID:???とりあえず、mapで書いてる行をgrepで書き直す。
@dir = grep { -d "temp/$_" && !/^¥./ } readdir(DIR);
0533nobodyさん
2006/07/14(金) 01:07:41ID:???print @dir ; か
chdir "./$dirname" or die してみそ
@dir の中身は
./temp/hoge
./temp/piyo
じゃなく
hoge
piyo
になるYO @OSX
0534nobodyさん
2006/07/14(金) 01:11:29ID:???foreachの前の時点で@dirに期待した値が入ってるかどうかぐらいは
確認して問題の切り分けをしろよ。
あとchdirも失敗することがあるので or dieしとけ。
0535nobodyさん
2006/07/14(金) 01:13:56ID:???誰かがなんか書いたらそれコピペして動くかどうかだけ?
なんだかなぁ。
0536nobodyさん
2006/07/14(金) 01:14:40ID:???open OUT, "> temp/$dirname/test.txt" or die "can't create the file\n";
ってすればいいじゃない
0537nobodyさん
2006/07/14(金) 01:21:07ID:???0538529
2006/07/14(金) 01:27:17ID:???できました!!!
ものすごく賢いやり方ですね。
>>534、>>533
chdirがうまくいってなかったというか、どうやら相対ディレクトリ名の指定とかが根本的
にわかっていなかったようです。openでカレントディレクトリも変わるんだと思ってました。
>>535
(・∀・)
みなさんどうもありがとうございます。
おかげさまで相対ディレクトリ名の指定ということに関してだいぶ理解が進みました。
0539nobodyさん
2006/07/14(金) 02:04:03ID:???そもそも1回目の
chdir "./$dirname";
でもし成功して temp/hoge/ になっちゃった場合、2回目はそこから chdir だから temp/hoge/fuga/ とかなんじゃねの?
0540nobodyさん
2006/07/14(金) 02:23:45ID:???フルパスも相対パスも知らずにファイル扱ってたのか((( ;゚Д゚)))
0541nobodyさん
2006/07/14(金) 02:33:40ID:???>>529 のコードではファイルへの書き込みを行なった後に chdir ".." してるから
temp/ → temp/hoge/ → temp/ と戻るはず。
でもやっぱり読みづらいから、カレントディレクトリはあんまり変えて欲しくないなぁ。
0542nobodyさん
2006/07/14(金) 16:30:45ID:???前提条件でそういうのはないならOKだが一般的にはchdir ".."では
戻れないかもしれない。
perlのchdirにはファイルハンドルやディレクトリハンドルを渡せるので、
戻りたいディレクトリを開いておいてこっちを使うほうが安全。
0543nobodyさん
2006/07/14(金) 18:02:15ID:IyAZlhFkqmailなのですが、perlにパイプさせるにはどうしたらよいでしょうか?
sendmailなら/etc/aliases でできますよね?
0545nobodyさん
2006/07/14(金) 19:43:53ID:???上記の掲示板に投稿する際のコード入力のスクリプトを作ったんですが
時たまコード入力より下が表示されなくなってしまいます。
どうすれば改善していいか分かりません。
どなたか改善よろしくお願いします。
0546nobodyさん
2006/07/14(金) 19:50:38ID:???<form>タグが無い。
<table>タグも無い。
下から5行目、==&gt;と書くべき所で、'==>' と書いている。
0547nobodyさん
2006/07/14(金) 19:55:39ID:???というか、sub code 自体をどこからも呼んでない…。
sub error は存在しない。
何がしたいの?そこからして不明。
0548nobodyさん
2006/07/14(金) 19:59:34ID:???削除パスワードの下に&code;で呼び出して使ってます。
sub errorはあります。
で何をしたいかと言うとどうやってもコード部分が原因だと分かっていてもたまにコード部分からしたが消える
のが直せないので直してほしいわけです。
0549nobodyさん
2006/07/14(金) 20:04:26ID:???0550nobodyさん
2006/07/14(金) 20:05:56ID:???そんな一部しかないんじゃ分からん…。
とりあえず、>>546 の通り&code の中でHTML表示してる部分、
tableタグの開始も終了も無いんだが…。そこが一番あやしい。
ちゃんとtableタグ入れてみたら?
それさえ分からなければ、PerlじゃなくてHTMLの質問だよ。
0551nobodyさん
2006/07/14(金) 20:08:03ID:???http://livetool.ty.land.to/aska/aska.cgi
ココに問題の掲示板とソースをのっけてあります。
数回更新ボタンを押していると表示されなくなりますのでそれを改善したいのです。
よろしくお願いします。
0552nobodyさん
2006/07/14(金) 22:04:47ID:LnOAoBN3よい参考書を教えてください
0554nobodyさん
2006/07/14(金) 22:26:32ID:cNzjTfEoその程度は参考書などいらない。
というか基本的にプログラム組むのに参考書なんていらない。
http://www.rfs.jp/sb/index.html
ここに書いてある内容を全て理解・・しなくても簡単にそのくらいは作れる。
まずは自分のパソコンに仮想環境を作ることが先決だ。
そうすればどれだけ程度の低い話なのかわかる。
優れたプログラムを組めるかどうかは人によって優劣がでるが、
最低限動くものなら健常者であれば誰でも可能。
0555nobodyさん
2006/07/14(金) 23:28:12ID:???WebProgは脆弱性があると、攻撃される危険が付きまとうことも忘れないでくれ。
と言うことで最低限ここは読んでおくべき。
ttp://www.ipa.go.jp/security/awareness/vendor/programming/
出来ればこの辺もね
ttp://www.jumperz.net/texts/csrf.htm
0556nobodyさん
2006/07/15(土) 13:04:39ID:FLr1xmaF0558nobodyさん
2006/07/15(土) 19:19:39ID:???>#乱数の作成
>$rand1 = int(rand(10));
を
$rand1 = int(rand(10)) + 1;
と末尾に+1しろ。
0559nobodyさん
2006/07/15(土) 19:25:01ID:???1). 自力でつくってんだったら協力したるのに
2). 向うの掲示板に問い合わせろよ
3). KENT かよ!
0560nobodyさん
2006/07/15(土) 19:41:55ID:???だいたい合ってるwwwww
&code; とか気持ち悪いな。暗黙に &code(@_); と渡されることを知ってての諸行かな。
せめて &code(); とかにしてほしいなあ。
0561nobodyさん
2006/07/15(土) 19:48:58ID:???ありがとうございます。
文法的にも間違っていたようです。
>>559
すべてではないですが大半は作りましたが・・・・・。
0562nobodyさん
2006/07/15(土) 19:53:50ID:???全体の半分以上。過半。大部分。副詞的にも用いる。
へぇ・・・。
0563nobodyさん
2006/07/15(土) 19:55:13ID:???>せめて &code(); とかにしてほしいなあ。
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
と釣られてみるテスト
0564nobodyさん
2006/07/15(土) 20:04:58ID:???ほんとかどうか知らんが、おれは KENT であろうとなかろうと問い合わせ先が記入されてるソースに関してのレスは
つけんぞ。
おまえさんがさきに「この部分が自作です」といえば
話は別になるときもあるが。
0565nobodyさん
2006/07/15(土) 20:06:20ID:???0566nobodyさん
2006/07/15(土) 20:38:18ID:???ダメな子が増えて困る。
0567nobodyさん
2006/07/15(土) 20:45:33ID:???少なくともチャント動くし
0568nobodyさん
2006/07/15(土) 21:34:29ID:???○ 動きはする
0569nobodyさん
2006/07/15(土) 21:59:01ID:???0570nobodyさん
2006/07/15(土) 22:15:52ID:???0571nobodyさん
2006/07/15(土) 23:50:29ID:???攻撃できまくり☆(ゝω・)v
0572nobodyさん
2006/07/16(日) 00:07:06ID:???外部から任意コマンド実行可能なまま。
0573nobodyさん
2006/07/16(日) 06:07:21ID:???0574nobodyさん
2006/07/16(日) 13:59:39ID:pJTY6Rn5例えば
$hoge = '2743AB5837C9849';
というような文字列があるとして
$hoge =~ s/\D//g;
とした場合に\Dに該当する方(ABC)の値を取りたいんですが
どうすれば良いんでしょうか?
0575nobodyさん
2006/07/16(日) 14:07:23ID:???$&
0576574
2006/07/16(日) 14:21:08ID:pJTY6Rn5ありがとうございます。
マッチ変数というのがあるんですね。
ttp://www.rfs.jp/sb/perl/02/09.html
>後方参照の変数には上記のほかに、マッチ変数 $& $` $' $+ があります。これらの変数を使うと
>プログラム内のすべての正規表現の処理が遅くなるので、注意して使ってください。
という記述があったんですが、できることなら使わない方が良い代物なんでしょうか。
それとも多用がいけないのであって、1、2箇所であれば問題ないんでしょうか。
0578nobodyさん
2006/07/16(日) 14:48:17ID:???> という記述があったんですが、できることなら使わない方が良い代物なんでしょうか。
> それとも多用がいけないのであって、1、2箇所であれば問題ないんでしょうか。
1回でも使っている箇所があると、全ての正規表現が遅くなる。
マッチ変数が使われているかどうか調べるためのモジュールはDevel::SawAmpersand
0579nobodyさん
2006/07/16(日) 14:56:43ID:pJTY6Rn5ありがとうございます。
ちょっと落雷がヤバイので一旦PCの電源落とします。
落ち着いたらそのときまたレスします。すみません。
0580nobodyさん
2006/07/16(日) 15:07:17ID:???my @hit = () ;
push @hit, $1 while $hoge =~ s/(¥D)// ;
みたく $1 を使えば?
つーか $& 使ったことないなあ。オレ。
0581nobodyさん
2006/07/16(日) 15:54:56ID:???0582nobodyさん
2006/07/16(日) 16:08:19ID:???0583bench 魔
2006/07/16(日) 16:56:41ID:???===そーす===
my $str1 = 'a' x 6 . 'hoge' ;
$str1 = $str1 x 100 ;
sub test1(){ my ( $tmp, @hoge ) = $str1 ; push @hoge, $& while $tmp =~ s/hoge// ; }
sub test2(){ my ( $tmp, @hoge ) = $str1 ; push @hoge, $1 while $tmp =~ s/(hoge)// ; }
#timethese 10000, { test2 => 'test2' } ;
timethese 10000, { test1 => 'test1', test2 => 'test2' } ;
===実行結果===
1. ソース内に $& 蟻
Benchmark: timing 10000 iterations of test, test2...
test: 13 wallclock secs (13.22 usr + 0.10 sys = 13.32 CPU) @ 750.75/s (n=10000)
test2: 14 wallclock secs (13.34 usr + 0.10 sys = 13.44 CPU) @ 744.05/s (n=10000)
2. ソース内に $& なし(test1 をコメントアウト
Benchmark: timing 10000 iterations of test2...
test2: 14 wallclock secs (13.32 usr + 0.10 sys = 13.42 CPU) @ 745.16/s (n=10000)
0584bench 魔
2006/07/16(日) 16:57:32ID:???==========
で、test1 を以下の様に変えて
sub test1(){
my ( $tmp, @hoge, @fuga, @piyo ) = $str1 ;
( push (@hoge, $& ),
push (@fuga, $`),
push(@piyo, $' )) while $tmp =~ s/hoge// ; }
実行してみたが…
Benchmark: timing 10000 iterations of test, test2...
test: 26 wallclock secs (24.80 usr + 0.22 sys = 25.02 CPU) @ 399.68/s (n=10000)
test2: 14 wallclock secs (13.28 usr + 0.08 sys = 13.36 CPU) @ 748.50/s (n=10000)
test2 の結果は余りかわらず。
prelre にまで書いてある記載だから $& とか使ったら遅くなるケースが必ずある筈なんだけどなあ。
実際のソースで自分で確かめるしかねーな。
0585nobodyさん
2006/07/16(日) 17:10:42ID:???文句言いながらやる君が好きだ。
でも、
> これらの変数を使うとプログラム内のすべての正規表現の処理が遅くなるので、注意して使ってください
だから、同じ時に計測すると $1 の方も遅くなっちゃうんじゃないのかな?
比較じゃなくて構わないから、参考に単独での速度を計ってみてくれるといいかも。
できれば
> @hoges = $hoge =~ /\D/g;
系と
> push @hoges, $1 while $hoge =~ /(\D)/g ;
系とでも比較してあるとなお。
0586bench 魔
2006/07/16(日) 17:51:19ID:???>比較じゃなくて構わないから、参考に単独での速度を計ってみてくれるといいかも。
583 の 2.の条件が $& を排除した形のものデス。
$& の入っている行をすべてコメントアウトしました。
お約束「あなたの為にやるんじゃないんだからね!!」
>>583 のソースに
sub cont (){ my ( $tmp, @hoge ) = $str1 ; @hoge = $tmp =~ /hoge/g ;}
を加えて実行 ( 実行名 cont )。実行回数は 5 万回に変更
Benchmark: timing 50000 iterations of cont, test1, test2...
cont: 49 wallclock secs (48.24 usr + 0.34 sys = 48.58 CPU) @ 1029.23/s (n=50000)
test1: 67 wallclock secs (65.77 usr + 0.39 sys = 66.16 CPU) @ 755.74/s (n=50000)
test2: 69 wallclock secs (66.33 usr + 0.53 sys = 66.86 CPU) @ 747.83/s (n=50000)
そこから $& が入った部分を全削除して実行
Benchmark: timing 50000 iterations of cont, test2...
cont: 44 wallclock secs (42.59 usr + 0.33 sys = 42.92 CPU) @ 1164.96/s (n=50000)
test2: 69 wallclock secs (66.67 usr + 0.54 sys = 67.21 CPU) @ 743.94/s (n=50000)
…なるほど、test2 ( $1 を利用 )にはもともとコストが掛ってて $& の影響が表われなかった
だけか。
一箇所の正規表現だけだと、$1 より $& を使った方が速いがソース全体だと影響を及ぼす
という妥当な結果かな。
0587nobodyさん
2006/07/16(日) 18:23:45ID:???オツカレ!
つまり $& を使うとそもそも結果を伴う $1 の処理には影響ないけど、
普通の正規表現も結果をとることになるから総合的に遅くなる、ってわけだな。
結局、>>574の場合、一番早いのは
my @matchs = $hoge =~ /\D/g;
$hoge =~ s/\D//g; # ※より早い形→ $hoge =~ tr/0-9//cd;
って2段階で処理して $& も $1 も使わない形なんだろね。
■ このスレッドは過去ログ倉庫に格納されています