Perlコーディング初心者質問スレ Part 49
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/05/31(水) 04:32:28ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0161nobodyさん
2006/06/05(月) 06:47:28ID:???うちではどっちもどっちだったよ
$ perl -v
This is perl, v5.8.7 built for cygwin-thread-multi-64int
$ cat hoge.pl
use Benchmark;
my $string = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
timethese(10000*100,
{
'lc' => sub {my $string2 = lc $string;},
'tr' => sub {my $string2 = $string;$string2 =~ tr/A-Z/a-z/;},
});
$ perl hoge.pl
Benchmark: timing 1000000 iterations of lc, tr...
lc: 2 wallclock secs ( 0.58 usr + 0.00 sys = 0.58 CPU) @ 1721170.40/s (n=1000000)
tr: 2 wallclock secs ( 0.54 usr + 0.01 sys = 0.55 CPU) @ 1814882.03/s (n=1000000)
$ perl hoge.pl
Benchmark: timing 1000000 iterations of lc, tr...
lc: 2 wallclock secs ( 0.52 usr + 0.00 sys = 0.52 CPU) @ 1923076.92/s (n=1000000)
tr: 2 wallclock secs ( 0.58 usr + 0.00 sys = 0.58 CPU) @ 1721170.40/s (n=1000000)
0162nobodyさん
2006/06/05(月) 07:48:02ID:???あれ、ほんとだね。わざわざありがとう。
置換するソースによって違うんかなあ?
うちは google に perl って入れてでてきた 56kb くらいのソースでやったんだけど。
それともアルファベット以外がたくさん入ってると lc は遅くなるとか? うーん・・・
perl の ver だったらやだなw
ちなみに
uc $string : 6.58 [s]
tr/a-z/A-Z/ : 5.50 [s]
0163nobodyさん
2006/06/05(月) 11:03:38ID:GKAwUgKi10個目以降全てに対して処理をしたい場合、
foreachで、1〜9回目のループをifで飛ばすようなやり方以外で、
何かスマートな方法はありますか?
0164nobodyさん
2006/06/05(月) 11:07:12ID:???0165nobodyさん
2006/06/05(月) 11:23:55ID:???配列スライスに対してforeachでいいんでね?
foreach my $i (@x[9..$#x]) { ... }
0166nobodyさん
2006/06/05(月) 12:24:24ID:???> うちは google に perl って入れてでてきた 56kb くらいのソースでやったんだけど。
それでやってみた。何回やってもlcの方が速かった。
$ cat hoge.pl
use Benchmark;
use LWP::Simple;
my $string = get('http://www.google.com/search?q=perl');
timethese(10000*100,
{
'lc' => sub {my $string2 = lc $string;},
'tr' => sub {my $string2 = $string;$string2 =~ tr/A-Z/a-z/;},
});
$ perl hoge.pl
Benchmark: timing 1000000 iterations of lc, tr...
lc: 1 wallclock secs ( 0.28 usr + 0.00 sys = 0.28 CPU) @ 3571428.57/s (n=1000000)
(warning: too few iterations for a reliable count)
tr: 0 wallclock secs ( 0.34 usr + 0.00 sys = 0.34 CPU) @ 2932551.32/s (n=1000000)
(warning: too few iterations for a reliable count)
$ perl hoge.pl
Benchmark: timing 1000000 iterations of lc, tr...
lc: 0 wallclock secs ( 0.23 usr + 0.00 sys = 0.23 CPU) @ 4347826.09/s (n=1000000)
(warning: too few iterations for a reliable count)
tr: 1 wallclock secs ( 0.32 usr + 0.00 sys = 0.32 CPU) @ 3115264.80/s (n=1000000)
(warning: too few iterations for a reliable count)
0167nobodyさん
2006/06/05(月) 12:35:00ID:???訂正。今やったら逆転した。(warningに気づいてなかったので回数を更に10倍にした)
やっぱりどっちもどっちじゃね?2倍も差が開くとは思えないけど。。ベンチ取ったスクリプトさらしてみて。
$ perl hoge.pl
Benchmark: timing 10000000 iterations of lc, tr...
lc: 4 wallclock secs ( 3.58 usr + 0.00 sys = 3.58 CPU) @ 2797202.80/s (n=10000000)
tr: 3 wallclock secs ( 3.42 usr + 0.02 sys = 3.44 CPU) @ 2911208.15/s (n=10000000)
$ perl hoge.pl
Benchmark: timing 10000000 iterations of lc, tr...
lc: 3 wallclock secs ( 3.41 usr + 0.01 sys = 3.42 CPU) @ 2928257.69/s (n=10000000)
tr: 3 wallclock secs ( 3.45 usr + 0.00 sys = 3.45 CPU) @ 2894356.01/s (n=10000000)
0168nobodyさん
NGNG0169nobodyさん
2006/06/05(月) 18:57:41ID:???ってか、うち1万回で5秒とかなのに、1000万回で3秒とか、どんなPCの性能差だよw
AthronXP1700 の 512MB あるんだけどなあw perl は 5.6
・・・っと思ったら、
use strict;
use Benchmark;
use LWP::Simple;
my $string = get('http://www.google.com/search?q=perl');
print $string;
これ何もでなくね?w status_line とったら 403 返ってきたよw google 内部で弾いてんのかな・・・
こっちはブラウザから見てソース保存して開いてやってた。 〜?q=perl&num=50&hl=ja
こんな感じ。
use strict;
use Benchmark;
my $string;
open (LOAD, 'lc.html'); read (LOAD, $string, -s LOAD); close (LOAD);
timethese(10000, {
'lc' => sub {my $string2 = lc $string;},
'tr' => sub {my $string2 = $string;$string2 =~ tr/A-Z/a-z/;},
});
0170nobodyさん
2006/06/05(月) 19:14:18ID:0Db/Ehfsとある文字が出てきたところで区切って
その区切ったそれぞれの文字を配列に入れるということをしたいのですけど、l
やり方が浮かばなくて・・・
どのようにコーディングすればいいのでしょうか?
0171nobodyさん
NGNG0173nobodyさん
2006/06/05(月) 19:39:21ID:0Db/Ehfsあっ 出来ました。 ありがとうございます
0174nobodyさん
2006/06/05(月) 19:52:22ID:JTs163rfデフォの /home/~username/.cpan にしとく?自分用に変える?
dotディレクトリに入れるのがなんか気持ち悪いんだが、、、
0176nobodyさん
2006/06/06(火) 01:40:03ID:???それぞれ一行ずつを取り出して表示させるにはどうすればよいでしょうか?
0177nobodyさん
2006/06/06(火) 01:53:24ID:???ていうか、本くらい読め。基本過ぎる
0178nobodyさん
2006/06/06(火) 02:06:41ID:???本だと私のやりたいことが載ってなかったので質問してしまいました
すいません、、、
@listに代入させた各行の1番目の<p></p>はそのまま、2番目の<p></p>を削除したいのですが、、、
0180nobodyさん
2006/06/06(火) 02:18:35ID:???なくなっちゃったんですか?探してもないんだけど。
0182nobodyさん
2006/06/06(火) 02:25:49ID:???「Perl&CGI入門」という本です
1番目の<p></p>はそのまま、2番目の<p></p>を削除がちょっと、、、
0183nobodyさん
2006/06/06(火) 03:09:49ID:???正規表現くわしくのってないのかな? 持ってないから分からん・・。
$line =~ s{^(.*?<p>.*?</p>.*?)<p>.*?</p>}{$1};
↓ (<p class="〜"> とかもあるなら)
$line =~ s{^(.*?<p(?:\s[^>]*)?>.*?</p>.*?)<p(?:\s[^>]*)?>.*?</p>}{$1};
これでいいかな? 試してないけど。
後で 3番目以降も削除したいんですけど、とか聞かないでね。応用しる。
あまりに正規表現に弱かったら、
if ($line =~ /<p>/) {
$line =~ s{<p>}{\x01};
$line =~ s{</p>}{\x02};
$line =~ s{<p>.*?</p>}{}g;
$line =~ s{\x01}{<p>};
$line =~ s{\x02}{</p>};
}
とでもやればいいんじゃねw おすすめはしないけど。
でもなんで 1番目だけいらないんだろうなw どう使うのか予想つかないわ。
0184nobodyさん
2006/06/06(火) 03:13:16ID:???たぶん、ム板にあるからいいじゃんということになったんだと思う
正規表現 part2
http://pc8.2ch.net/test/read.cgi/tech/1131028296/
0185nobodyさん
2006/06/06(火) 03:16:48ID:???> これ何もでなくね?w status_line とったら 403 返ってきたよw google 内部で弾いてんのかな・・・
うはwwwごめんwww
同じスクリプトでやってみた。trの方が速いっぽい。まあそれでも2倍も差はつかないけども。。
$ perl -v | head -2
This is perl, v5.8.7 built for cygwin-thread-multi-64int
$ wc lc.html
133 2052 60082 lc.html
$ for i in 1 2 3 4 5 ; do perl hoge.pl ; done
Benchmark: timing 10000 iterations of lc, tr...
lc: 3 wallclock secs ( 2.93 usr + 0.00 sys = 2.93 CPU) @ 3408.32/s (n=10000)
tr: 3 wallclock secs ( 2.47 usr + 0.00 sys = 2.47 CPU) @ 4043.67/s (n=10000)
Benchmark: timing 10000 iterations of lc, tr...
lc: 3 wallclock secs ( 2.97 usr + 0.00 sys = 2.97 CPU) @ 3362.47/s (n=10000)
tr: 3 wallclock secs ( 2.47 usr + 0.00 sys = 2.47 CPU) @ 4042.04/s (n=10000)
Benchmark: timing 10000 iterations of lc, tr...
lc: 3 wallclock secs ( 2.90 usr + 0.00 sys = 2.90 CPU) @ 3443.53/s (n=10000)
tr: 3 wallclock secs ( 2.56 usr + 0.00 sys = 2.56 CPU) @ 3901.68/s (n=10000)
Benchmark: timing 10000 iterations of lc, tr...
lc: 3 wallclock secs ( 2.92 usr + 0.00 sys = 2.92 CPU) @ 3419.97/s (n=10000)
tr: 3 wallclock secs ( 2.49 usr + 0.00 sys = 2.49 CPU) @ 4011.23/s (n=10000)
Benchmark: timing 10000 iterations of lc, tr...
lc: 3 wallclock secs ( 2.90 usr + 0.00 sys = 2.90 CPU) @ 3443.53/s (n=10000)
tr: 3 wallclock secs ( 2.47 usr + 0.01 sys = 2.48 CPU) @ 4027.39/s (n=10000)
0186nobodyさん
2006/06/06(火) 06:19:56ID:???0187nobodyさん
2006/06/06(火) 10:15:26ID:???自分はこうやってるんだけど他にいい方法ない?ならわかるけどさ。
0188nobodyさん
2006/06/06(火) 11:17:16ID:???0190nobodyさん
2006/06/06(火) 14:59:19ID:Re1RmuFGもっと簡潔に書けるような気がするんですが自分ではこれが限界でした。
あと、ファイルロックのやり方が合っているのか自信がありません。
一応動いていることは動いているんですが、問題はないでしょうか。
改良すべき点、根本的にこういう書き方に直した方が良い、とかあればアドバイスお願いします。
大まかな内容は以下のようなものです。
予定として保存する内容は「予定日(月と日)」と
「予定内容(長くても200バイト程度)」の2つでフォームから渡します。
予定を保存するファイルは月単位で作成します。
例えば2006年5月の予定の場合なら「200605.txt」というファイル名です。
保存するファイルがないときはその都度作成し、
6月1日
6月2日
6月3日
.
.
.
という風に日付だけを先に入れておきます。
保存するファイルがあるときは、
フォームから渡された「予定日」とマッチした日付の次の行に「予定内容」を書き込みます。
内容は以上です。次レスにコードを晒します。
0191190(前半)
2006/06/06(火) 15:03:27ID:???$a = sprintf("%04d%02d",$YEAR,$MON)
$file = "$a.txt";
# 月から日数を出す
if($MON == 1|3|5|7|8|10|12){
$m = 31;
}elsif($MON == 4|6|9|11){
$m = 30;
}else{
if($YEAR % 4 ==0){
$m = 29;
}else{
$m = 28;
}
}
for($i=1;$i<=$m;$i++){
$date .= "$MON月$i日\r\n\r\n";
}
0192190(後半)
2006/06/06(火) 15:04:16ID:???if(!open(IN,"$file")){
open(OUT,">$file")
flock(OUT,2);
print OUT $date;
close(OUT);
}
open(IN,"$file");
flock(IN,2);
@A = <IN>;
close(IN);
# 「予定日」とファイル内の「日付」をマッチングさせて該当日付に「予定内容」を書き込む
$loop = @A;
$i = 0;
while($loop > 0){
if($A[$i] eq $plan_day){# $plan_day = "フォームからの情報(予定日)";
$A[$i] .= "$plan_value\r\n";# $plan_value = "フォームからの情報(予定内容)";
}
$loop --;
$i ++;
}
if(!open(OUT, "+< $file")){&error;};
flock(OUT, 2);
truncate(OUT, 0);
seek(OUT, 0, 0);
print OUT @A;
close(OUT);
0193nobodyさん
2006/06/06(火) 15:04:28ID:???自作CGIを評価するスレ
http://pc8.2ch.net/test/read.cgi/php/1049514428/
0195nobodyさん
2006/06/06(火) 17:58:30ID:???これ斬新だな。当然Warning出るけど一応動くんだw
0198nobodyさん
2006/06/06(火) 18:34:39ID:???入れ直したいんですが良い方法が浮かびません。
うまく表現できないので例を挙げると、
「@listの中身は20コあって、5コごとに折り返して再び@listに入れ直す」
という意味は、下のようなイメージです。
$list[0] = $list[0] . $list[5];
$list[1] = $list[1] . $list[6];
$list[2] = $list[2] . $list[7];
$list[3] = $list[3] . $list[8];
$list[4] = $list[4] . $list[9];
$list[5] = $list[10] . $list[15];
$list[6] = $list[11] . $list[16];
$list[7] = $list[12] . $list[17];
$list[8] = $list[13] . $list[18];
$list[9] = $list[14] . $list[19];
0199nobodyさん
2006/06/06(火) 18:37:06ID:???0201nobodyさん
2006/06/06(火) 18:46:12ID:???そらビット演算するだろなw
やりたかったのは
if($MON =~ /^1|3|5|7|8|10|12$/)
こうだろうね
0202nobodyさん
2006/06/06(火) 18:47:16ID:???if($MON =~ /^(?:1|3|5|7|8|10|12)$/)
0203nobodyさん
2006/06/06(火) 18:56:40ID:???0204nobodyさん
2006/06/06(火) 19:04:10ID:???も、もう少しヒントお願いします。
>>200
例えば、EXCELのフォーマットの関係でCSV出力のときだけ
こういう処理をしたりするのって変ですか?
0205nobodyさん
2006/06/06(火) 19:18:40ID:???標準入力の読み込み位置を変更したいのですが
seek STDIN, 0, 0;
ではダメなようでして
なにか術があれば教えてください
0206nobodyさん
2006/06/06(火) 19:21:39ID:???1つのループでいけるかとおもったけど、前半と後半でちゃうのか・・・
処理方法を見直したほうが良いかと思うw
0207nobodyさん
2006/06/06(火) 19:23:03ID:???1行でもできるんでない?
ヒントをいえば、
右側は常に list[n] + list[n+5]
になってて、
その n ってのは、左側を list[i] とすれば、
i が 5回ごとに 10 足されていって、それに、 i 回目を 5 で割ったあまりを足したもの。
0208nobodyさん
2006/06/06(火) 19:24:49ID:???(1) 一旦ファイルに書き出したのを利用する
(2)そんなにでかくないのなら read で読み込んだものを利用する
の2通りがあります。
大きいファイル、環境にも夜でしょうが 5MB あたりを境に (1) か (2) かを使い分ければ良いかと思います。
0210nobodyさん
2006/06/06(火) 19:41:34ID:???あ〜、無理に $i 1つでやろうとしてたから駄目だったかw
>204
use strict;
my @list = map{ "str$_" }(0..19);
my $n = 0;
my @newlist = ();
for(my $i = 0; $i < 10; $i++){
if($n && !($n % 5)){ $n += 5; }
$newlist[$i] = $list[$n] . $list[$n + 5];
$n++;
}
print join("\n", @newlist);
0211nobodyさん
2006/06/06(火) 19:44:07ID:???エレガントじゃないけど、こんなのどうかな・・・
use strict;
sub wrap_list($@) {
my ($width, @list) = @_;
return @list if $width <= 0 or @list == 0;
my @result = (), my $wrap = 0, my $i = 0;
for (@list) {
$result[$i++] .= $_;
if ($i % $width == 0) {
$wrap = !$wrap;
$i -= $width if $wrap;
}
}
return @result;
}
my @wlist = wrap_list 5, ('a'..'z');
print "@wlist\n";
0212nobodyさん
2006/06/06(火) 20:00:57ID:???my @list;
for (my $i = 0; $i < 10; $i++) {
my $j = $i % 5 + 10 * int($i / 5);
$list[$i] = $list[$j] + $list[$j + 5];
}
0213nobodyさん
2006/06/06(火) 20:02:43ID:???>>198
my @list;
for (my $i = 0; $i < 10; $i++) {
my $j = $i % 5 + 10 * int($i / 5);
$list[$i] = $list[$j] . $list[$j + 5];
}
0214nobodyさん
2006/06/06(火) 20:05:47ID:???うはw 答え書いちゃうとわざわざヒント出した意味がww
まあありか。
自分が書いたのは >>213 まんまっす。
配列数がわからない場合、$i < 10 の部分は、事前に
my $limit = (scalar @list) / 2; で $i < $limit; とでも。 # @list は偶数であること。
0215198
2006/06/06(火) 20:08:34ID:???こういうことでしょうか・・・でも結果がうまく出ないです。
どこが間違ってるんでしょうか?
for($i=0;$i<10;$i++){
if($i>=5){
$n = ($i%5) + 10 + $i;
}else{
$n = $i;
}
$list[$i] = $list[$n] . $list[$n+5];
}
0217198
2006/06/06(火) 20:10:27ID:???あわわ、レスあったのに気付かなくてすみませんでした!
ありがとうございます!ゆっくり拝見させていただきます。
0219nobodyさん
2006/06/06(火) 20:12:27ID:???あ、ズバリその通りです。
ただ、自分の場合いきなり任意の数でできるレベルじゃなかったので・・・。
どんな数にでもすぐ応用できるものがあれば一番良いと思っています。
0221nobodyさん
2006/06/06(火) 20:15:15ID:???$list[10] から先が残ったまんまだぞ。
まあ >>198 見ると残らせるのか残らせないのか分からないけどねw
>>198 は残らせないなら @newlist に入れるべし。
0222nobodyさん
2006/06/06(火) 20:19:35ID:???「>>198の動作を、2行の折り返しから3行の折り返しにしたくなった」
「3行bヌころかn行(任意の行数)に折り返したくなった」
ちゃんと拡張できますか?
0223nobodyさん
2006/06/06(火) 20:21:42ID:???0225207
2006/06/06(火) 20:29:44ID:???んじゃ、ちょっと面白そうなのでやってみた。
>>213 に似た自分のソースでの回答w
use strict;
my $ori = 10; # ○個ごとに折り返す (自然数)
my $ren = 4; # 繋げる個数
my @list = map{ " $_ " }(0..119); # @list の数は $ren と $ori の倍数であること
# loop
my @newlist = ();
my $limit = (scalar @list) / $ren;
for (my $i = 0; $i < $limit; $i++) {
my $n = int($i / $ori) * $ori * $ren + $i % $ori;
$newlist[$i] = '';
for (my $j = 0; $j < $ren; $j++) {
$newlist[$i] .= $list[ $n + ($ori * $j) ];
}
}
for (my $i = 0; $i < scalar @newlist; $i++) {
print "$i : $newlist[$i]\n";
}
exit;
連結に2重 for 使うのはしょうがないよね・・・。
0226198
2006/06/06(火) 20:29:59ID:???そうですね。その点を見落としていました。
>>222
3列の場合は・・・こう?
for (my $i = 0; $i < 30; $i++) {
my $j = $i % 5 + 15 * int($i / 5);
$list[$i] = $list[$j] . $list[$j + 5] . $list[$j + 10];
}
任意の行については・・・もうちょっと待って下さい・・・。
0227211
2006/06/06(火) 20:30:39ID:???引数で$n(行数)を受け取ったとして
$wrap = !$wrap;
$i -= $width if $wrap;
を
if ($wrap++ < $n-1) { $i -= $width }
else { $wrap = 0; }
に直したらできます。
0228222
2006/06/06(火) 20:37:25ID:???_、_
( ,_ノ` ) n
 ̄ \ ( E) グッジョブ!!
フ /ヽ ヽ_//
0230198
2006/06/06(火) 20:59:42ID:???解答を見てもよく分からない部分もあるようなレベルなので
参考にしつつ勉強してきます。
お付き合いしていただいた方々、本当にありがとうございました。
0231nobodyさん
2006/06/06(火) 21:29:12ID:???中身を表示→数字に1を足す という動作をさせたいのですが、
中身をセットする時点で数字が消去されてしまうようです。
open (ID,">id.txt");
$id = <ID>; #ここの時点で中身が消去?
print "$id";
$id++;
print ID "$id";
close(ID);
例えばファイルの中身の初期値が100ならば、
最初は100、リロードの度に101、102・・・と表示されると思うのですが
上手くいきません。
ご指摘のほどよろしくお願いいたします。
0232nobodyさん
2006/06/06(火) 21:35:14ID:???>open (ID,">id.txt");
書き込みでopenしているので、中身はこの時点で消去です。
一度読み込んでから、書き込むように変えましょう。
0234nobodyさん
2006/06/06(火) 21:41:43ID:???seek
減る事もある場合、桁数に注意
0235nobodyさん
2006/06/06(火) 23:19:31ID:???$word が任意の入力できる文字列で、文字コードが EUC か UTF8 だとして、
$word = quotemeta $word;
$word =~ /$word/;
に、セキュリティホールってある? 普通に通るかすら。
0236nobodyさん
2006/06/06(火) 23:22:01ID:???$word = quotemeta $word;
$text =~ /$word/;
こうですた。
0237nobodyさん
NGNG0238nobodyさん
2006/06/06(火) 23:43:29ID:???俺は\x00-\x19までを削除してるのと、正規表現で意味のもつものをエスケープする以外はなんもやってない
0239nobodyさん
2006/06/07(水) 00:01:52ID:Z9iT2VzKopen(FILE, "<2get.txt") || print "file open error!";
while(<FILE>){
print;
}
とやって、2get.txtの内容を出力する、というのを応用して、
2get.txtの内容を途中まで読み込むCGIを作りたいのですが。
例えばこの2get.xtxの中の1行に、
<!-- ここまで -->
とか書いておきます。
で、CGIで読み込む時に、上から1行ずつ読んでいって
<!-- ここまで -->の行が出てきたら、読み込み終了。
実際に自分で作ってみて、while〜の1行を
while(<FILE> ne '<!-- ここまで -->') ||(以下略)
って書き換えたら、CGIが動かなくなりますた。
どっかで勘違いしてるんだろうと思うんだけど、
勘違いのポイントかヒントだけでも教えてください。
0240nobodyさん
2006/06/07(水) 00:16:13ID:???print; の前に抜ける条件を書いて lastしてみればいいんじゃないかと。
0241nobodyさん
2006/06/07(水) 00:41:37ID:DSNCvTMFつーか500エラーが出ました。
while(<FILE>) {
if($_ eq '<!-- ここまで -->') { last; }
print;
}
これで合ってますか?
0242nobodyさん
2006/06/07(水) 00:47:38ID:DSNCvTMFでも<!-- ここまで -->を読んでくれません。
''で囲むんじゃダメなんですかね?
それとも改行コードも考慮しないといけないとか?
0247nobodyさん
2006/06/07(水) 01:03:44ID:???一気に全部読んで文字列に入れてから、その文字があるなら正規表現でずばっと削除したほうが早いよね。
0249nobodyさん
2006/06/07(水) 01:11:19ID:???0250248
2006/06/07(水) 01:18:21ID:???「早いよね」ってことだったので、速いか遅いかは読込むデータの傾向や動作環境によるっつー話。
メモリやら I/O の話はどこから出てきた?
0251nobodyさん
2006/06/07(水) 01:20:34ID:???>>239 の場合
local $/ = '<!--ここまで-->';
open (FILE, '2get.txt');
$_ = <FILE>;
close (FILE);
print $_;
ってやると解決しないか?
速度的にも一番早い。
0252nobodyさん
2006/06/07(水) 01:23:04ID:???>>244
ありがとうございました。なんとか動くものになりました。
>>247
正規表現もまだ理解しきっていないので…
今後のメンテナンスの時に考えることにします。
0253251
2006/06/07(水) 01:24:25ID:???0255nobodyさん
2006/06/07(水) 01:38:27ID:???まじでwww
うちではうまくいくけどなあ。
ちょっとこれだけ走らせてみt
[2get.txt]
1111111111111111111111111111111111111111111
222222222222222
3333333<!--ここまで-->333333333333
[hoge.pl]
use strict;
{
local $/ = '<!--ここまで-->';
open (FILE, '2get.txt');
local $_ = <FILE>;
close (FILE);
chomp $_;
print $_;
}
exit;
\r\n\r\n ずつデータとるときとかに使えるしwktkだと思ったんだがなあ。
0256nobodyさん
2006/06/07(水) 01:43:22ID:???0257nobodyさん
2006/06/07(水) 01:52:11ID:???どうなんだろ?
とりあえず試しに 200kb くらいのテキスト用意して、
- - - - - - - - - - - - - - - - - - - - - - - - - - -
$/ = '『根掘り 葉掘り 聞き回る』の・・・『根掘り 葉掘り』・・・・・ってよォ〜〜〜
『根を掘る』ってのはわかる・・・・・スゲーよくわかる 根っこは土の中に埋っとるからな・・・
だが「葉掘り」って部分はどういう事だあああ〜〜〜〜〜っ!?
葉っぱが掘れるかっつーのよーーーーーーッ!
ナメやがってこの言葉ァ 超イラつくぜぇ〜〜〜ッ!!
葉っぱ掘ったら裏側へやぶれちまうじゃあねーか!
掘れるもんなら掘ってみやがれってんだ!チクショーーッ
どういう事だ!どういう事だよッ!クソッ!葉堀ってどういう事だッ!
ナメやがってクソッ!クソッ!';
- - - - - - - - - - - - - - - - - - - - - - - - - - -
・・・って入れてやってみたけど、こっちでは無事その前部分だけに切り取られたよw
0259nobodyさん
2006/06/07(水) 01:59:10ID:???え、どんなエラーでてる?
ブラウザでやってるなら
#!/usr/bin/perl
print "Content-type: text/html\n\n";
も入れてね?
0260nobodyさん
2006/06/07(水) 02:03:21ID:???その文章の方が気になりますがw
すんません、Content-typeを入れるの忘れてますた。
んで、今度こそ大丈夫だと思ったら空白ページ。
鯖環境かなんかですかね?
■ このスレッドは過去ログ倉庫に格納されています