トップページ⇒php
1001コメント331KB

【Perl】初心者コーナー Part18

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん02/11/20 22:04ID:???
いらっしゃーい、Perlの「コーディング」で困ってる人のスレです。

1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。

1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。

CGIだけど、なんか質問ある? Part 8
http://pc.2ch.net/test/read.cgi/php/1032704121/
参考書籍の話題は【Perl,CGI】参考書籍 第三版
http://pc.2ch.net/test/read.cgi/php/1030209573/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般/Part2】
http://pc.2ch.net/test/read.cgi/php/1030548610/
スクリプトの改造依頼は 【 スクリプト改造工房 PART 5 】
http://pc.2ch.net/test/read.cgi/php/1028193595/

過去ログ、その他の役立ち情報は>>2-10あたりを見よう。
0357nobodyさん02/12/11 13:21ID:mexeU5Q0
use Time::Local;
しても
timelocalが使えません。

助けてください。
0358nobodyさん02/12/11 13:25ID:???
>>357
実はPerl4ってことはないか?(w
ところでどう使えないんだ?エラーが出るのか?値が不正なのか?
良ければここにソースを書いてみれ。
0359nobodyさん02/12/11 13:25ID:mexeU5Q0
>>357
のことは忘れてください。。。
0360nobodyさん02/12/11 14:40ID:???
>>356
Firebirdかなんか知らんが、つまりはDBIだしょ?

$sqlResult = $statement->execute();
で、処理した件数が返ってくるはずだが・・・
0361nobodyさん02/12/11 15:55ID:3BdsDO3l
サイト制作スレから誘導されてきました。

コマンド「chmod」の代わりになるコマンドってあるんですか?
もしあるのであれば教えてください。
もしくは
$ImgFile = "$ImgDir$no$tail";
if (!open(OUT,"> $ImgFile")) {
if ($clip_err) { &error("画像のアップロードに失敗しました"); }

}
binmode(OUT);
binmode(STDOUT);
print OUT $upfile;
close(OUT);

chmod (0666,$ImgFile);

この部分をchmodを使わずに構成する事はできませんか?
>>1で指定された書き方が出来そうにないのでこういう形でお聞きします。
どなたかお願いします。
0362nobodyさん02/12/11 16:10ID:???
お勧めできないかもだけど
open(OUT, "> $ImgFile")より上に umask 0;
0363nobodyさん02/12/11 16:22ID:IDueDvlE
>>358
いえ、Perl4なんてことはないっす。w
前はActivePerl5.6.1ビルド633でGDBM_FileをPPMインスコした記憶があって、
今回ActivePerl5.8.0ビルド804にする際以前の5.6.1ビルド633は綺麗さっぱり
DISKから消してしまったんです。GDBM_Fileは後からインスコすればいいという
考えで。
そしていざGDBM_Fileのインスコしようと思ったら、Perl5.6用しか見つからなくってお口あんぐり状態な訳です。

エラーは
Can't locate GDBM_File.pm in @INC (@INC contains: C:/perl/lib C:/perl/site/lib .) at (eval 1) line 2. BEGIN failed--compilation aborted at (eval 1) line 2.

と、漏れのマシンにGDBM_Fileが装備されてないって出ます。
ソースの抜粋は。。。自分が作ったスクリプトじゃない配布物なんで、カキコするのもちと・・・。
動作は電話帳データベースのようなもので、電話番号を入力すれば住所が分るといったものと同等です。

暫く待てばPerl5.8(Windows)用のGDBM_Fileが出てくるのかな?
0364nobodyさん02/12/11 16:44ID:???
>>362
chmodの行を削って
open(OUT, "> $ImgFile")より上に umask 0;
という事でよろしいですか?

ありがとうございました。
0365nobodyさん02/12/11 17:50ID:???
スクリプトの中で、
require './jcode.pl'; # jcode.plのパス
をしてjcode.plを呼んでるんですけど、コマンドラインで
「C:\>perl "C:\Documents and Settings\***\デスクトップ\unko.cgi"」
を実行すると、
「Can't locate ./jcode.pl at C:\Documents and Settings\***\デスクトップ\unko.cgi line 17.」
と出てしまいます。
(webだとエラーになりません。ローカルではデスクトップでスクリプトを実行しています。)
なぜでしょうか。
0366nobodyさん02/12/11 18:14ID:???
require 'jcode.pl';
require '.\jcode.pl';
0367nobodyさん02/12/11 19:35ID:???
>>365
カレントディレクトリに jcode.pl がないんでしょ。
そのコマンドラインだと、カレントは C:\ で、スクリプトのある場所と違ってるし。
0368nobodyさん02/12/11 20:42ID:???
>>363
5.8は使ってないので的外れかもしれんが。
5.6用しかないというのはどこでわかったんでそ?
ppmでも見つからない?
0369nobodyさん02/12/11 20:59ID:???
>>367
じゃぁいちいち、perlのスクリプトがある場所までcdしてからやらないといけないのですか?
毎回cdするのは結構面倒だと思うんですけどどうなんでしょうか。
0370nobodyさん02/12/11 21:03ID:3ApX3k5Y
面倒だと思うなら、useしませう。
0371nobodyさん02/12/11 21:08ID:???
デスクトップでスクリプトはしらすのは・・ワラタ
0372nobodyさん02/12/11 21:32ID:IDueDvlE
>>368
そうなんです。Perl5.6用は見つかるんですが5.8用に全く行き当たらなくって。
グーグルしか使ってませんが。w
暇を見てぼちぼち探してみます。
>>365
いっぺんお使いのPerlにJcodeをインスコしてみてはどうでしょ。
コマンドプロムプトで

perl -MCPAN -e shell

してから、プロムプトがcpanに変化しますんで

>cpan install Jcode

でいけるかと。
0373nobodyさん02/12/11 21:57ID:???
>>371
え?デスクトップではしらすのはトーシローですか?
0374nobodyさん02/12/11 22:10ID:a27i1ZyR
半角スペースで区切られたファイルを split を使って並び替えたい&いらないものを破棄したいんですが
上手くいきません。Perl5を使っています。

#!/usr/bin/perl

$file = 'split.txt';

open(IN,$file);
@data = <IN>;
close(IN);
foreach(@data){
($1,$2,$3,$4) = split(/ /,$_);
$newdata = "$4,$3,$2";
open(OUT, ">$file");
print OUT "$newdata\n":
close(OUT);
}
exit;

これを走らせると
Modification of a read-only value attempted at split.cgi line 9.
と split の部分にエラーが出てしまいます。
どうしたらいいんでしょうか?
0375nobodyさん02/12/11 22:15ID:qA0+bOBO
>>374
$1とか$2というのはマッチの特殊変数。
任意の値を代入することは出来ない。
変数名を別なのに変えるべし。
0376nobodyさん02/12/11 22:22ID:???
>>373
もしくはヘビーユーザー( ´∀`)

>>374
同じファイル2回もopenするのは無駄っぽいから、
>>331(の下のやつ)みたいに1回にまとめた方がいいかもね。
0377nobodyさん02/12/11 22:26ID:???
っていうかforeachの中でopenしてんのかぁ・・(´Д`;)
037837402/12/11 22:34ID:???
やっぱり OPEN させすぎですかね?(;´Д`)
とりあえず、出来ました。ありがとうです。
chomp(だっけ?) だかなんだかを使ってやるやり方があったような…
0379nobodyさん02/12/11 22:47ID:???
>374
つーか、chomp使ってないから、できたファイルは意図したようにはなってないはずだが?
0380ありゃ02/12/11 23:15ID:pgarahTm
すみません、ハッシュの全データの全角スペースを
削除したいのですが、
foreach (values %array){
s/ //g;
print "$_\n";
}
とした場合と、
foreach (values %array){s/ //g;}
foreach (values %array){print "$_\n";}
とした場合、私のローカル環境(パールのバージョン:5.6.0 built for i386-linux)
では、同じ結果が出るのですが、ほとんどのレンタルサーバ上で
実行すると、違った結果が出力されてしまいます。
なぜでしょう?
}

038135302/12/12 00:03ID:???
>>354
レス、サンクスです。

>モードは"+>"だよね。そのコードからすると。
"+>"と"+<"は意味は同じですよね?ちなみに僕は"+<"です。

open(FILE,"xxxx");
@file = ();
push @file, scalar <FILE> for 0..8;
seek(FILE,0,0);
print FILE "zzzz";
print = @file;
close(FILE);

こんな感じでいいんですよね?
いまいち”scalar <FILE> for 0..8”この辺の書き方が曖昧にしか理解できていないど、
本でも読んで理解したいと思います。

0382nobodyさん02/12/12 00:04ID:???
そんなバナナ
0383nobodyさん02/12/12 00:53ID:???
まさか、スクリプトとテスト用データの文字コードが違ってるとかの
話じゃないよね? っていうか「違った結果」の
希望とする値
実際の結果
の両方が見たいんですけど。
0384nobodyさん02/12/12 01:25ID:ZGG2sBOp
>>381
違うよ。
"+>"は内容を消す。
"+<"は内容がそのまま残ってしまう。
素直に一旦読んだ後書き込みで開き直した方がいい。
0385ありゃ02/12/12 01:56ID:DcSt6eP2
>>383
すみません、
%array = ('one' => '0 1','two' => '0 2','three' =>
'0 3');
とした場合、希望する結果は01と02と03が表示されることで、
私のローカル環境(パールのバージョン:5.6.0)
では、上下どちらの書き方でも同じ結果が出ますが、
実験した複数のサーバでは、
上の場合では0 1と0 2と0 3が表示され、
下の場合では01と02と03が表示されてしまいます。
実験したサーバのひとつは、パールのバージョンが5.0
だったので、単にバージョンの違いでしょうか・・・。
0386Q102/12/12 03:43ID:???
質問です。
ランダムリンクを作成して、
処理で
print "Location: http://xxxx.xx.xx/\n\n";
として飛ばしているのですが、
サンプルで自分のホームページを登録したのですが、
試して見ると、 302 FOUNDと表示されます。
この処理はアンカータグを使い、getの処理で呼び出しているのですが、
呼び出すページと飛ぶページが同じだと、302が表示される様なのですが、
これを回避する方法はないでしょうか。
「302を表示させずに、そのページへ飛ぶ。」というのは可能でしょうか。
0387マリモーマ02/12/12 05:04ID:ItnO3SiH
メタタグで 飛ばしてみたら?
&header;
print "<meta http-equiv=refresh content=0;url=http://$url>;";
exit;
0388Q102/12/12 05:39ID:???
ありがとうございます。やはり、それしかないですかね。
検討してみます。
ありがとうございました。
0389nobodyさん02/12/12 09:19ID:???
質問です。いまフリーのスクリプトを見て勉強中なのですが

> if ($mode %2 != 1) {

っていうのがあるんですけど、これの %2 って何ですか?
0390nobodyさん02/12/12 09:23ID:???
>>389
2で割った余り。
$modeを2で割って余りが1じゃなかったら
= $modeが偶数なら の意味だね。
0391nobodyさん02/12/12 09:30ID:???
>>386
ステータスヘッダ送ればいいじゃん。

print "Status: 200 OK\n";
039239102/12/12 09:33ID:???
あっダメだわ・・さ
039338902/12/12 11:25ID:???
>>390
>2で割った余り。
あっそうか。% と 2 がくっついてるので
「またPerlの記号的な記法か」と思ってしまいました。
ありがとうございます。
0394nobodyさん02/12/12 11:55ID:???
sendmailでReturn-Pathがうまく入らないんですけどなぜですか。
0395nobodyさん02/12/12 12:09ID:???
>>394
勝手に変えられないように設定してあるから。
039635302/12/12 15:33ID:???
>>381
と言うことは

open(IN,"<xxxxx");
flock(IN,2);
@file = ();
push @file, scalar <IN> for 0..8;
close(IN);
open(OUT, "+>xxxxx");
flock(OUT,2);
seek(OUT,0,0);
print OUT "zzzzz\n";
print OUT @file ;
close(OUT);

とした方が良いみたいですね。
なんとなくopenを2回するのは、あんまりいいことではないと思っていました。
"+<"と"+>"の違いも教えてもらって、感謝します。
039735302/12/12 15:34ID:???
>>384でした・・・
自分にレスした・・・
0398nobodyさん02/12/12 18:05ID:???
>>395
誰が設定してるんですか?
0399nobodyさん02/12/12 18:32ID:???
>>398
俺
040033602/12/12 19:14ID:BLMNLzB2
エラーつぶせました!!<<レス下さった方ありがとう。
ここ間違ってました。
sub decode {
if ($ENV{'CONTENT_LENGTH'} > 51200) { &error("長すぎます"); }
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/,$buffer);
foreach $pair (@pairs) {
($name,$value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

# S-JISコード変換
&jcode'convert(*value,'sjis');
}
}←このカッコを忘れていた。

エラーメッセージよりだいぶ上(^^;

・・・でも動かない。なんでだろう。
ファイルへの書き込みが出来ていないみたいなんですが。。。

>>344
それはここに書き込む時に付け加えたので問題ないです(^-^;
040133602/12/12 19:18ID:BLMNLzB2
この部分なんですが、
#入力された内容をファイルを作って保存する。
sub words {
$file = "./pass.txt";
if($in{'pass'} eq ""){ &error("設定できませんでした"); }
open PD, ">$file" or &error("システムエラー発生");
@pwd = ('a'..'z','A'..'Z','0'..'9','.','/','%');
srand;
$kw = $MIX[int(rand(@pwd))] . $MIX[int(rand(@pwd))];
$words = crypt("$in{'word'}", $kw);
print PD "$words";
close PD;
}
@pwdの変数をちょっと変えているんですが、これは使っては駄目ですか?
(%とか/とか。)
#参考にした掲示板スクリプトでは中身が9までしかないです。
#それ以降は私の付け加え。
040233602/12/12 19:19ID:BLMNLzB2
↑ファイルへの書き込み、を行うサブルーチンです。
0403nobodyさん02/12/12 19:51ID:???
>>401
@MIXって @pwd じゃない?(別に@MIXがあるのかな)
あと、cryptの salt($kw) は '%' は使えません。
それ以外の64文字は使えるので、 int(rand(@pwd)) は int rand 64 でもOK。
0404nobodyさん02/12/12 20:01ID:???
すみません。頭悪いのでアルゴリズムが浮かびません。

以下のようなsort したデータがあります。

名前,点数というデータの形(配列)です。

山田,28
山田,39
佐藤,94
加藤,83
加藤,28
加藤,28
木下,23
木下,33

ここから、各人の合計点を出したいのですが、どうするのが良いでしょうか?
名前でuniqする方法は分かるのですが、点数を足していく方法がわかりません。
ヒントだけでよいので、お願いします。
0405nobodyさん02/12/12 20:07ID:ZGG2sBOp
>>404
@dataに入ってるとして、
%hash=();
for (@data) { my @array = split/,/; $hash{$array[0]} += $array[1]}
で%hashに入る。
0406nobodyさん02/12/12 21:01ID:???
>>404
すげーー!目からウロコ。thanx

12行位かかって書いてたのに、一行って!(for は foreachでなくてもOK?)
平均点(合計点 / 名前の出現回数)を出すには、

%hash=();
$no =1;
for (@data) {
my @array = split/,/;
$hash{$array[0]} += $array[1];

if ( $prev_name eq $array[0]){ $no ++; }else{ $no = 1; }
$avg = $hash{$array[0]} / $no;
$prev_name = $array[0];

}

??? とか? やっぱ頭悪い。
0407nobodyさん02/12/12 21:16ID:???

割り算の後に小数点を下2桁まで表示したいのですが、

sprintf("%4.2f",$a) すると割り切れる時でも小数点以下に 3456.00
と出てしまいます。

割り切れない場合、 1234.56
割り切れる場合 1000

と表示するにはどうしたらよいのでしょうか?
0408nobodyさん02/12/12 21:20ID:H3YHNRGs
最近、始めてPerlを使い出したんだけど
use strictってなんでみんな使わないの?
0409nobodyさん02/12/12 21:23ID:???
>>407
普通に条件分岐するのはダメ?

>>408
みんな使ってると思うよ。
0410nobodyさん02/12/12 21:26ID:???
>>409
そうかなあ。ちゃんとしたPerl使いならもちろん
使っているだろうけど、CGIだけのためにPerlやってる
人ってなんかそういうのあんまり意識してないような。。。
0411nobodyさん02/12/12 21:33ID:???
>>407
$a =~ s/\.00$//;

>>410
巷で配布してるCGIはピンからキリまであるからなあ。
あと配布用にPerl4でも動くようにしてるところもあるでしょうし。
0412nobodyさん02/12/12 21:35ID:???
>>411
>配布用にPerl4でも動くようにしてるところもあるでしょうし
なるほど。それもあるかもしれませんね。
0413ななし02/12/12 22:17ID:???
隠しページがありそうなとこのソースみたら文字化けしていました。
なんとか方法は分かったんですが、ブラウザにドラッグするののやり方が
わかりません。おしえてください。おねがいします。
0414nobodyさん02/12/12 22:20ID:???
・・・
0415nobodyさん02/12/12 22:21ID:LUwqAPKo
>>407
ありがとうございます。
そういう方法しかないんですかね。結局。

あるサイトに

$a = int($a * 100)/100;

ってあったんですけど、これだと無駄が多そうですよね。

$a =~ s/\.00$//;
$a =~ s/\.0$//;

の方が早そうですね。
0416nobodyさん02/12/12 22:39ID:???
>>413
日本語を勉強してください
大体の意図を頑張って汲み取ると、EUCとかの文字コードに対応してるエディタを使え、と
0417nobodyさん02/12/12 22:50ID:rgoFlUwc
★最新情報★
★http://yahooo.s2.x-beat.com/linkvp/linkvp.html★
0418n02/12/12 22:51ID:rgoFlUwc
★最新情報★
★http://yahooo.s2.x-beat.com/linkvp/linkvp.html★
0419nobodyさん02/12/12 23:05ID:???
>>415
int $a でも逝けるっぽい
0420nobodyさん02/12/12 23:16ID:???
>419
>407を読み直した方がいいかも。
0421nobodyさん02/12/12 23:19ID:i62/L17Z
sprintf($a=~s/\.0+//?"%4f":"%4.2f",$a)
0422nobodyさん02/12/13 00:03ID:???
>>407
$b=sprintf('%4.2f', $a); a+=0;
042342202/12/13 00:04ID:???
あ
$b+=0;
の間違い。
0424nobodyさん02/12/13 00:12ID:???
>>406
ベタだけど、

%hash1=%hash2=();
for (@data) {
my @array = split/,/;
$hash1{$array[0]} += $array[1];
$hash2{$array[0]}++;
}
$hash1{$_} /= $hash2{$_} for keys %hash1;

でどうかな。(結果は%hash2)
042539802/12/13 00:53ID:???
誰か本当のことをおしえてください。
0426nobodyさん02/12/13 07:15ID:???
>>425
偉い人 夜勤くらい
042742402/12/13 08:15ID:???
結果は%hash1でした。
0428nobodyさん02/12/13 11:37ID:???
>>425
検索すれば理由は簡単に判りそうな気がするけど・・・

ttp://www.ryu.dyn.to/cgi-bin/tree.cgi?action=clip&no=771
※※※これは「Return-Path」のみの検索キーで見付けた※※※

注)自力で調べる努力を怠ってる人はまともに相手をして貰えません
042942502/12/13 14:46ID:???
>>428
あなたみたいな人が居るので甘えちゃうんです。ごめんなさい。
0430nobodyさん02/12/13 15:58ID:???
>>407
の者ですが。色んな方法がありますね。

sprintf($a=~s/\.0+//?"%4f":"%4.2f",$a)

と

$b=sprintf('%4.2f', $a); $b+=0;

が一番シンプルそうです。

>>419
int $a ではいけないですよね?
0431nobodyさん02/12/13 17:39ID:iG+3sspL
誕生日と名前フォームデータ($yyyy,$mm,$dd,$name)を
CSVで貯めるのですが、その際、CSVデータが誕生日$yyyy,$mm,$ddで
ソートしたいのですがいつソートするんでしょう?

1回そのまま書き込んで、もう一回呼んで、ソートしかないですか?
書き込む前にソートできますか?
0432nobodyさん02/12/13 18:07ID:???
>>431
マルチ
0433nobodyさん02/12/13 18:16ID:???
>>431
好きなように決めてくれ。
書き込みが追加書き込みなら、読んでからソートのほうが改造が楽。
基本的には頻度が少ないほうでソートするべきだろう。
0434nobodyさん02/12/13 19:29ID:4EJmzvt/
>>403
@MIX??・・・は、ないです。
$MIXではなく@MIXにしないといけないのでしょうか。
あ、あと%の件ありがとうございました(^^;

で、書き直しましたが、これでもできてないです。
文法エラーとかInternalエラーとかは一切出ず、フォームに
言葉を入れてボタンを押すとリロードされます(これはちゃんとした処理)
動いているように見えるんですけど、PDへの書き込みが出来てません。
どこで引っかかっているのかな・・・。
cryptが動いていないのか、ファイル書き込みが動いていないのか。。。
0435nobodyさん02/12/13 19:54ID:???
>>434
$MIX を $pwd でどう?
それ以外は問題なさそうだけど。
0436nobodyさん02/12/13 20:12ID:???
>>434
そもそも、
$kw = $MIX[int(rand(@pwd))] . $MIX[int(rand(@pwd))];
は、
$kw = $pwd[int(rand(64))] . $pwd[int(rand(64))];
であるべきでは?
あと、
print PD "$words";
は、何かセパレータを入れておくべきかも?
例:
print PD "$words\n";
13文字ずつで切り出せばよいけれども。
0437nobodyさん02/12/13 20:13ID:???
今掲示板を作成中で、よくある「次の何件」と言うやつを付けようと思って試行錯誤しているところなんですが、僕の今のスキルでは以下の物を書くのがやっとでした。
これはちょうど表示部分のところです。

#このスクリプトの名前,"bbs.cgi"
$pagemax = "1ページの表示数";
$file = "データファイル";

open(OUT, "<$file");
flock(OUT,2);
@view = <OUT>;
$log = @view;
if($ARGV[0] =~ /\d{1,3}/){
print @view[$ARGV[0]..$ARGV[0]+$pagemax];
$ARGV[0] += ++$pagemax;
if($ARGV[0] < $log){
print "<a href=\"bbs.cgi?$ARGV[0]\">NEXT</a>";
}
}else{
print @view[0..$pagemax];
if($log > $pagemax+1){
$pagemax++;
print "<a href=\"file.cgi?$pagemax\">NEXT</a>";
}
}
close(OUT);

とりあえずこれで動作はしたんですが、もっとスマートな方法はないですかね?何かすごく効率が悪そうなんで。
0438nobodyさん02/12/14 01:20ID:???
25歳。
去年まで金無し君だったけど、オンラインカジノとパチンコで
二年で350万貯めた。一度やってみなよ。
初回のみだけど、1ドル以上のチップを買えば30ドル(4000円くらい)貰える。
もらうだけもらってプレイせずに換金することもできるし、ルーレットで赤か黒に
思い切って賭けてしまえば50パーセントで二倍になる。
金なきゃオフラインでゲームすればいいだけ。暇つぶしになる。
ビデオポーカーとかスロとか色々あるのでマジでお勧め。
http://www.imperialcasino.com/~1kl5/japanese/
0439nobodyさん02/12/14 11:40ID:???
perl で \nで区切られたログファイルを読み込みたいんですが
無駄なところは読み込みたくないので
何行目〜何行目 を ハンドルに放り込む方法はないのでしょうか?
044043902/12/14 11:57ID:???
配列使わないでやるのは無理なのかな?
ちょっとログがMB級あるんで
必要なところだけ読み込めたら楽なんだけど
0441nobodyさん02/12/14 12:20ID:???
>440
原始的な方法でいいなら、100〜200行の場合。

$from = 100;
$to = 200;
open(IN,$file);
foreach $l(1 .. $from-1){<IN>;}
foreach $l($from .. $to){push(@data,<IN>);}
close(IN);

とか。

過去スレで出た方法だと、行の始まりのインデックスを別ファイルに保存して
readで呼び出すとかあったかな?
0442nobodyさん02/12/14 12:59ID:???
行の頭から数B読み込む程度の方法しかないんじゃないかな。
データを展開しないで指定行に飛ぶのは無理っぽい。
044343902/12/14 13:08ID:2kNAmjtj
やっぱり難しいのかな?
ログファイルの記録方法を考え直して見ます
0444nobodyさん02/12/14 13:12ID:???
漏れに不可能はないぜ
0445nobodyさん02/12/14 15:48ID:???
>>439
$from = 100;
$to = 200;
$lines = $to - $from + 1;
open IN, "head -$to | tail -$lines |";
044643902/12/14 17:39ID:???
>>445
んん すまんです
とほほ見ながらやってるくらいのレベルなんで
ファイル名はどうすればいいんでしょうか?
044743902/12/14 17:45ID:???
>>445
open IN, "head -$to $filename | tail -$lines |";
で逝けそうですね ありがとうございます。
0448nobodyさん02/12/14 19:22ID:???
俺がよくやるのは、

while (<IN>) {
next if ++$count < $from;
last if $count > $to;
...
}

ファイルの大きさと、指定範囲によるけど、
数千行ぐらいなら十分かなぁと。
パイプは起動コスト高いから、ベンチとって見るのがいいと思う。
perlメモにperlでtailするサンプルあったけど、正直大して早くなかった。
でもお勧めは、バークレイDBかな。。身も蓋も無いけど。
0449nobodyさん02/12/14 21:36ID:???
フォームから送信された内容を溜めて
自動で、別窓で一覧にして永久的に表示するというのをやりたいのですが
どうしたらいいでしょう
0450nobodyさん02/12/14 21:46ID:???
>>449
プリントアウトしてモニタ画面に張り付ける。
0451nobodyさん02/12/14 21:49ID:???
あーあ
0452nobodyさん02/12/14 22:57ID:???
>>407
激しく亀レスで悪いがprintf関数の変換指定に%gを使えば一発だよ。
0453nobodyさん02/12/14 23:14ID:TSZsnHUG
電波少年は意味不明な終わり方をしたわけで・・・


An electric wave boy is the reason which carried out the way which finishes being incomprehensible...


電波少年は不可解な方法を実行した理由です...



微妙ですが
0454nobodyさん02/12/15 00:32ID:???
誤爆?
0455nobodyさん02/12/15 01:03ID:???
>>448
それ結構時間かかるよ
あまりスマートじゃないけど配列に読んだほうが
速い
0456nobodyさん02/12/15 02:18ID:???
元データに行番号うっとけよ。
■ このスレッドは過去ログ倉庫に格納されています