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

Perlコーディング初心者質問スレ Part 41

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん05/03/10 00:47:16ID:sT66OcmD
Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。

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

最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。

過去ログやお勧めサイトは >>2-10
0381nobodyさん2005/04/05(火) 16:21:48ID:ZNntFGGU
ここに誘導されて来たんですけど、

Perlのフォームの入力確認の部分で
フォーム内容A=フォーム内容B
でなければエラー

という簡単な記述があれば教えて頂けないでしょうか?
0382nobodyさん2005/04/05(火) 16:26:07ID:???
('A`)
0383nobodyさん2005/04/05(火) 16:37:20ID:???
釣られてみる
%FORMにクエリーが入ってるとして
if($FORM{'formA'} ne $FORM{'formB'}){&error(エラールーチンとか);}


初歩的にも度が過ぎる・・・
0384nobodyさん2005/04/05(火) 18:08:15ID:ZNntFGGU
>>383
やっぱりうまくいきません。

フォーム1の名前:password1  タイプ:password
フォーム2の名前:password2  タイプ:password
if ($password{'password1'} ne $password{'password2'}) { &error('エラーです。'); }

他に何か加えないといけないでしょうか?
問題点があったら、よろしくお願いします。
0385nobodyさん2005/04/05(火) 18:14:00ID:???
%passwordに何も入ってないというオチ
0386nobodyさん2005/04/05(火) 18:17:26ID:ZNntFGGU
%password にクエリーを入れるという意味がわからないのですが・・・
よろしくお願いします。
0387nobodyさん2005/04/05(火) 18:23:15ID:???
>>383 の想像をはるかに超えた初歩的度。
0388nobodyさん2005/04/05(火) 18:27:50ID:ZNntFGGU
わからないです。
どこがわるいんでしょうか?
0389nobodyさん2005/04/05(火) 18:31:59ID:ZNntFGGU
ヤフー検索。
クエリーを入れる→7件

my $q; #クエリーを入れる
my $method; #メソッドを入れる

↑はクエリーですか?
0390nobodyさん2005/04/05(火) 18:34:50ID:???
>>388
%passwordに渡した内容が自動的に入ると思ってる?
思ってんならそれ間違いだから。中身は空だから。
0391nobodyさん2005/04/05(火) 18:37:46ID:ZNntFGGU
直して付け加えたのはここの部分だけです。

フォーム1の名前:password1  タイプ:password
フォーム2の名前:password2  タイプ:password
if ($password{'password1'} ne $password{'password2'}) { &error('エラーです。'); }

でやっても、上の入力は無視されて飛ばされてるみたいで、
一緒でなくてもそのまま送信されてしまいます。上級者の方、よろしくお願いします。
0392nobodyさん2005/04/05(火) 18:39:32ID:ZNntFGGU
>>390
要するにどこをどのように直せばよろしいのでしょうか?
0393nobodyさん2005/04/05(火) 19:07:40ID:???
>ヒントではなく、
>このように直せば動く、このように付け加えれば動く、
>という指摘がうれしいのですが・・・。
>初心者ではなく言語がわからない人です。

こいつWeb制作板でこんなこと書いとる
0394nobodyさん2005/04/05(火) 19:28:53ID:ZNntFGGU
$a=newpass;
$b=newpass2;

if (!$namecheck && $name eq '') { &error('名前を入力してね。',''); }
if ($a==$b eq '') { &error('パスワードエラーです。',''); }

このようにifがいろいろ並んでいるのですが、
それに1行加えてみましたが、見事にエラーになりました。
よろしくお願いします。
0395nobodyさん2005/04/05(火) 19:33:04ID:???
エラーログを読みましょう。
0396nobodyさん2005/04/05(火) 19:59:42ID:ZNntFGGU
$a="passward1";
$b="passward2";

if (!$namecheck && $name eq '') { &error('名前を入力してね。',''); }
if ($a ne $b) { &error('パスワードエラーです。',''); }

にしたら、「パスワードエラー」が表示されるようになりました。
しかし、A=BでもA=Bでなくても、エラーになってしまいます。

「パスワードエラー」までいくようになったので、あとはAとBの置き換えの問題だと思うのですが、
この記述は上の方に書いたのですが、フォーム上の
name="passward1"
を
$a="passward1"
と置き換えていいのでしょうか?
0397nobodyさん2005/04/05(火) 20:25:29ID:???
ま、どうでもいいけど、passward は password って書いたほうがいいと思うけどな。

どうでもいいんだけどな。
0398nobodyさん2005/04/05(火) 20:32:11ID:???
%form にクエリーを入れて返す関数

sub get_form {
my %form;
seek(STDIN,0,0);
read(STDIN,$_,$ENV{'CONTENT_LENGTH'});
foreach(split(/&/)){
my($name, $value) = split(/=/);
$value =~ s/%([a-fA-F0-9]{2})/chr(hex($1))/eg;
$form{$name} = $value;
}
return %form;
}
0399nobodyさん2005/04/05(火) 20:46:00ID:???
そろそろ釣りと気づけよ。
0400nobodyさん2005/04/05(火) 20:57:55ID:???
⊂二二二( ^ω^)二⊃ ブーン
0401nobodyさん2005/04/05(火) 21:22:59ID:???
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq9.html#How_do_I_decode_a_CGI_form_
> CGIフォームをデコードするには?
> 標準のモジュール、多分CGI.pmを使うとよいでしょう。あなたが手作業で行うことは多分ありません!

使い方はこの辺りとか。
ttp://www.futomi.com/lecture/form/cgi-pm.html
0402nobodyさん2005/04/05(火) 21:57:40ID:ZNntFGGU
sub get_form {
my %form;
seek(STDIN,0,0);
read(STDIN,$_,$ENV{'CONTENT_LENGTH'});
foreach(split(/&/)){
my($name, $value) = split(/=/);
$value =~ s/%([a-fA-F0-9]{2})/chr(hex($1))/eg;
$form{$name} = $value;
}
return %form;
}

をデコード処理というところに貼ってみましたが、だめでした。
いろいろありがとうございました。
0403nobodyさん2005/04/05(火) 22:31:15ID:???
すいません、perlでテキストファイルを自分のサイトのアップローダ(php)に上げようとして
http://bird.dip.jp/computing/zive.html
ここを参考にしてみたんですがうまくアップロード出来ません。一応アクセスは出来てるようですが…。
もしかしてperlでアップロードする時は該当ファイルのパスが変わるのかなと思ったり。
以下に「全ソース」を貼らせてもらいます…。
アップロードしたいファイルはC:\Perl\test.txtの位置、このスクリプトを置いてる位置はC:\(直下)にあります。
どなたかアドバイスよろしくお願いします…。

# アップロード用

use constant URI => 'http://hoge.net';
use strict;
use LWP::UserAgent;

# POST parameters
my @param = ('hoge=1',
'MAX_FILE_SIZE=500000',
'uploadfile=C:\Perl\test.txt');

my $ua = LWP::UserAgent->new;
my $req = HTTP::Request->new(POST => URI);
$req->content_type('application/x-www-form-urlencoded');
$req->content(join('&', @param));
my $res = $ua->request($req);

open(OUT, ">> ./hoge.txt");
binmode(OUT);
print OUT $res->as_string;
close(OUT);
exit 0;

結果はアップロード拒否用のページのソースが出力…。
0404nobodyさん2005/04/05(火) 23:10:32ID:???
>>403
http://hoge.net はアップローダじゃないようだが?
04054032005/04/05(火) 23:20:45ID:???
>>404
一応、http://hoge.net/index.phpにしてみましたが駄目でした…。
0406nobodyさん2005/04/05(火) 23:31:49ID:???
>>405
http://hoge.net/index.php も存在しないようだが?
0407nobodyさん2005/04/06(水) 07:29:51ID:???
>>403
ファイルアップの場合のcontent-typeは普通multipart/formdata
CGI側でチェックしてないことが多いのでフォームパースはやってくれるかもしれないがPOSTの内容はmultipart/formdataの仕様に合わせないとだめ。
0408nobodyさん2005/04/06(水) 08:36:24ID:???
multipart/form-dataでした
詳細はrfc2388
0409nobodyさん2005/04/06(水) 18:15:00ID:cBYix7o3
.htaccessが使えない環境なのですが、
POST以外のデータ受け取りを拒否する方法ってありますか?
0410nobodyさん2005/04/06(水) 18:26:17ID:???
$ENV{'REQUEST_METHOD'}
0411nobodyさん2005/04/06(水) 18:54:05ID:cBYix7o3
ありがとうございます。
0412nobodyさん2005/04/06(水) 18:59:03ID:0ohpKdgA
こまっています。

postgresql8.0
windowsXP
perl5.008
DBD::PgPP
の環境にて、perlからpostgresにデータインサートをおこなっているのですが、
DBIのトランザクションがなかなか理解できません。
使いかた、文法間違っていないかご教授お願いします。

$dbh= DBI->connect($DBname, $DBuser, $DBpass);
$dbh->{AutoCommit} = 0;
$dbh->{RaiseError} = 1;

eval {
#テーブル1にinsert
$SQL= "INSERT 〜";
$sth= $dbh->prepare($SQL);
$sth ->execute();
     #テーブル2にinsert
$SQL= "INSERT 〜";
$sth= $dbh->prepare($SQL);
$sth ->execute();
$dbh->commit;
};
if ($@) {
$dbh->rollback;
}
$sth->finish();
$dbh->disconnect();
0413nobodyさん2005/04/06(水) 21:11:07ID:cBYix7o3
質問よろしくお願いします。
掲示板を作っているのですが、reverseを使わずに、
ログファイルの先頭に書き加えるにはどうしたらいいでしょうか?
なるべくリソースを使わないようにしたいです。

また、意中のレスを削除するために、
ログファイルから、その行だけを取得する方法はありますでしょうか?

よろしくお願いします。
0414nobodyさん2005/04/06(水) 21:41:05ID:???
>>407
>>408
色々と探した結果ここのページ参考にして

修正してみたんですが、どうもうまく動きません…。
一応アップロード用のphpファイルと接続出来ているようですが、
やはりフォームデータが正常に送信出来てないようです。
とりあえずアップロード用のモードでサーバーのphpが結果を出力してるので、
全てのフォームデータが送信されてないわけではないと思うんですが。
うーん。

use HTTP::Request::Common;
use strict;
use LWP::UserAgent;

my $ua = LWP::UserAgent->new;

my $res = $ua->request(POST 'http://yomogiwakakusa.jog.buttobi.net/index.php',
Content_Type => 'form-data',
Content => [ upload=> '1',
MAX_FILE_SIZE => '500000',
userfile => "test.txt" #アップロード用ファイル、plスクリプトと同階層
]);

print $res->as_string;
open(OUT, ">> ./result.txt");
binmode(OUT);
print OUT $res->as_string;
close(OUT);
exit 0;
0415nobodyさん2005/04/06(水) 22:18:05ID:???
>>414
phpが期待する入力と合ってないだけでしょ。
0416nobodyさん2005/04/06(水) 22:33:49ID:???
>>413
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq5.html#How_do_I_change_one_line_in_a_fi

>>414
use LWP::Debug qw(+);
0417nobodyさん2005/04/06(水) 23:15:15ID:???
>>415
>>416
ありがとうございます。
アップロード用のphpの方をいじってファイル名がどういう風に送信されてるか表示させてみました。
で、同じようにこのコードで実行してみると、

my $userfile='C:\test.txt';
my $res = $ua->request(POST 'http://hoge.net/index.php',
Content_Type => 'form-data',
Content => [ upload_log => '1',
MAX_FILE_SIZE => '500000',
userfile => $userfile
]);

php側じゃ$userfileの値が「C:\\test.txt」と円マーク二つ返してきてます…。
これじゃアップロード出来ないですよね。

一応こちらのperlの方を「C:\\test.txt」と変更して実行すると、
返り値は同じ「C:\\test.txt」、
ヤケクソになって「C:\\\test.txt」と円マーク三つつけて実行すると、
「C:\\\\test.txt」と四つになって返ってきます。
perlってこんな仕様だったかな…。

すいません、そろそろ大詰めっぽいのでどなたか良きアドバイスを…。
0418nobodyさん2005/04/06(水) 23:20:19ID:jUkFe3D6
共用鯖で全てのPHP RUBYスクリプトが使えなくなるプログラムを作ってください
0419nobodyさん2005/04/06(水) 23:26:41ID:???
$userfile='C:/test.txt';
0420nobodyさん2005/04/06(水) 23:43:37ID:???
>>417
ファイル名だけ来てファイルの内容が来てないということ??
04214142005/04/06(水) 23:45:15ID:???
>>419
ああ、そんな簡単なことでよかったのか…、
ということでやってみましたが確かにファイル名はそのまま送信できましたけど、
結局アップロードは出来ず。
なぜだ…。

とりあえず>>416さんに教えてもらったコードでデバグしてみるとこんな感じでした。

LWP::UserAgent::new: ()
LWP::UserAgent::request: ()
LWP::UserAgent::send_request: POST http://hoge.net/index.php
LWP::UserAgent::_need_proxy: Not proxied
LWP::Protocol::http::request: ()
LWP::Protocol::collect: read 860 bytes
LWP::Protocol::collect: read 1852 bytes
LWP::UserAgent::request: Simple response: OK

0422nobodyさん2005/04/06(水) 23:49:36ID:???
>>420
えと、ご存じかも知れませんがphpじゃアップロードされたファイルはこんな↓感じの形式で
サイズとかいろいろなデータを取得できるんですが、
$_FILES['userfile']['name']
$_FILES['userfile']['tmp_name']

中身がからっぽなのでとりあえず
$userfile= $_REQUEST['userfile'];
とただの変数扱い?にしてperlから送信されてくるファイル名を調べてみたんです。
04234142005/04/07(木) 00:14:05ID:???
とりあえず参考にしたページを上げ忘れていたので補足。これの下の方です。
http://homepage3.nifty.com/hippo2000/perltips/HTTP/Request/Common.html

> これはおおむね以下のようなHTTP::Requestオブジェクトを作成します
> (バウンダリと~/.profileは違っていることでしょう):

ここがちょっと意味がわからない…。
0424nobodyさん2005/04/07(木) 01:10:34ID:???
>>412
普通、テーブル2へのinsertでエラーが発生したらrollbackさせる。

>>414
|Content-Type: multipart/form-data; boundary="6G+f"
や
| PATH=/local/perl/bin:$PATH
| export PATH
はそのとおりではないだろうという事。
0425nobodyさん2005/04/07(木) 01:32:34ID:hZmAmpQN
配列を返す関数をダブルクォートの中で展開するにはどうしたら良いのでしょうか?
$, = '+'とした後、keys(%expect)をダブルクォートの中で配列として評価し展開したいんです。。
色々と試してみたのですが、結局やり方が分からなかったのでどなたか教えて頂けると嬉しいです。
0426nobodyさん2005/04/07(木) 01:35:16ID:???
>>425
意味わかんねえよ。もうちっと具体的に。
04274142005/04/07(木) 01:42:28ID:???
>>424
ああ、そういうことですか、なるほど…。

ひとつ気になった点。
普通にブラウザのフォームから「アップロードファイルの参照は空欄のままにして」submitした場合、
送信しようとしたアップロードファイルのデータをphpの側が

[userfile] => Array
(
[name] =>
[type] =>
[tmp_name] =>
[error] => 4
[size] => 0
)

と出力するんですが、
ローカルのperlからデータ送信した場合なぜか
Array
(
)
と、根本的に何もかも空っぽになってしまいます。
これは何か怪しい…かな。
0428nobodyさん2005/04/07(木) 01:43:18ID:???
>>426
すいません。。返信ありがとうございます。
%expectにはいくつかのデータが入っていて、そのキーだけを取り出し+で繋げて$outに代入したいんです。
なので、
$, = '+';
my @tmp = keys(%expect);
$out = "@tmp";
とすれば出来るんですが、わざわざ@tmpを作るのが汚いので@tmpを作らずにこれが出来る方法を質問させて頂いた次第です。
0429nobodyさん2005/04/07(木) 02:12:32ID:mpm+fGDU
for(keys %expect){ $out .= $_."+";}
04304282005/04/07(木) 02:24:45ID:???
>>429
返信ありがとうございます。それも試したんですが、一番最後に+が付いてしまうので。。
0431nobodyさん2005/04/07(木) 02:29:36ID:???
join '+', keys(%expect)
0432nobodyさん2005/04/07(木) 02:30:05ID:???
>>425>>428>>430
特殊変数 $, と $" を勘違いしている。

my %hash = (foo => 2, bar => 3, baz => 4);
{ local $, = '+'; print 1, sort(values %hash), 5, "\n" }
{ local $" = '+'; print "1+@{[ sort values %hash ]}+5" }
04334282005/04/07(木) 02:35:39ID:???
>>432
思いっきり勘違いしてました。。$"ですね。ご指摘ありがとうございます。>>429さんすみません。
>>431
なるほどー。全然思いつきませんでした。。それでいきたいと思います。ありがとうございました。
0434nobodyさん2005/04/07(木) 12:06:08ID:2qkaRxVD
スカラーコンテストを略してスカコンと言ったら
先輩に怒鳴られました。何が悪かったのでしょう?
0435nobodyさん2005/04/07(木) 12:12:29ID:dowco4wM
>>434
「スカタン」と聞き間違えたんじゃないかな。
0436nobodyさん2005/04/07(木) 12:14:18ID:???
スカコン -> スカトロコンプレックス
スカラーコンテスト -> スカラーコンテキスト
0437nobodyさん2005/04/07(木) 12:27:59ID:2qkaRxVD
>>435
なるほど!って、それはないですよ。うち関西じゃなし

>>436
あ、スカラーコンテキストです。へへ
0438nobodyさん2005/04/07(木) 13:32:24ID:???
>>434
共通の認識の無い略語を使われると意味が通じないということでしょう。
スカコンは一般的に使われている略語とは思えない
0439nobodyさん2005/04/08(金) 00:23:01ID:???
すいません、質問なんですが、

hoge.pl
lib
└----hoge.pm
     hoge
       └----test.pm

という構造で、test.pmのsub{ }の中から
hoge.plの中のグローバル変数の値を取得するにはどういうコードを書けばいいんでしょうか。
よろしくお願いします。
0440nobodyさん2005/04/08(金) 00:35:08ID:???
>>439
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlmod.html

但し普通そんな行儀の悪い受け渡し方はしない。
0441nobodyさん2005/04/08(金) 00:47:06ID:???
>>440
ありがとうございます。
ついでにもう一つ行儀の悪いことかと思うのですが、
同じくtest.pmの中にあるサブメソッドから、
hoge.plの中で定義してあるサブメソッドを呼び出すにはどうしたらよいのでしょうか。

実はお教え頂いたページはgoogle検索で見ていたのですが、
自分ではまだ不勉強な部分が多くほとんど要領を得ませんでした、無念。

よろしければ、簡単なコードを示して頂ければ嬉しいです。
横着を言ってすいません。
0442nobodyさん2005/04/08(金) 02:47:20ID:???
ああ、$::hoge、あるいは$main::hogeでmainにある変数hogeにアクセス出来るんですね。
やっとわかりました。

しかし、ネストされたモジュールの中のサブルーティンからメインに置いてある
サブルーティンを呼ぶ方法が未だにわかりません。

どなたかよろしくお願いします。
0443nobodyさん2005/04/08(金) 07:50:27ID:???
>>439
お前はモジュールというものがわかってない
3つに分けないで1つにしておけ
0444nobodyさん2005/04/08(金) 09:48:04ID:???
>>443
自分でつくったなら一つにするんですけどね…。
0445nobodyさん2005/04/08(金) 12:10:49ID:???
>>442
スカラー変数のプレフィクスは $
配列のプレフィクスは @
ハッシュのプレフィクスは %
サブルーチンのプレフィクスは &
型グロブのプレフィクスは *

print map "$_ => [$main::{$_}]\n", sort keys %main::;
0446nobodyさん2005/04/08(金) 15:30:24ID:???
>445
できました!ありがとうございます
0447nobodyさん2005/04/08(金) 20:51:39ID:RsQcEeNJ
euc-jpには\や@などが含まれていないというのを
読みましたが、同じくタブ文字(\t)も含まれていないのでしょうか?

日本語のデータをeuc-jpで保存していて、そのフィールドの区切りを
タブ文字にしているので、これで絶対に大丈夫なのか、不安に
思いました。
0448nobodyさん2005/04/08(金) 20:55:43ID:j5c3p0G/
教えてください。
最近のperlではinet_aton()の仕様が変わったのでしょうか?
nslookupが複数のIPアドレスを返すホストを引数に与えると
inet_aton()が失敗します。最初のIPアドレスを返すのが仕様だと
思ったのですが。バージョンは以下のとおりです。

perl --version
This is perl, v5.8.2 built for sun4-solaris
0449nobodyさん2005/04/08(金) 21:02:13ID:???
>>447
http://www.din.or.jp/~ohzaki/perl.htm#Character
0450nobodyさん2005/04/08(金) 22:02:13ID:???
>>448
何に対して「最近」か知らんけど、OS 側のライブラリにも依るんじゃないの。
http://search.cpan.org/src/NWCLARK/perl-5.8.2/ext/Socket/Socket.xs
http://search.cpan.org/src/NWCLARK/perl-5.8.6/ext/Socket/Socket.xs
http://search.cpan.org/~nwclark/perl-5.8.6/pod/perlhist.pod
04514482005/04/08(金) 22:56:06ID:???
>>450
ありがとうございます。
OSのライブラリgethostbyname()に依存している可能性が
あるわけですね。
CGIを書いているのですが、CGIに関しては質問を受け付けないと
言っているISPなので困ったなあ。
0452nobodyさん2005/04/08(金) 23:08:49ID:OhDnlIyM
初歩的な質問なんですが。

opendir(DIR, "./$folder");
@dir = readdir(DIR);
closedir(DIR);
for($i=0;$dir[$i];$i++){
$ts = ($dir[$i] =~ /^\d+\.html/) ?
(stat("./$folder/$dir[$i]"))[9] - 800000000 : ' ';
$dir[$i] = "$ts,$dir[$i]";
}
@dir = sort {$b cmp $a;} @dir;
これってopendir(DIR, "ls-t./$folder");
で済むと言われたのですが
UNIXでのOS環境でのことですよね?
コーディングでOSのコマンドを利用するようなやり方は
あまりよく知らないもので。



0453nobodyさん2005/04/08(金) 23:31:30ID:???
(;^ω^)?
0454nobodyさん2005/04/08(金) 23:44:12ID:OhDnlIyM
今いろいろ検索して調べていたのですが
なんか疑問に感じた。
ディレクトリのなかのファイルを新しい日付順に降順で並び換える
プログラムなのですが、、、
そもそもlsって表示コマンドだし、-tオプションは昇順表示だし。
OSのコマンドを使うにしても並び換えのコマンドだと
思うのだが。
よくわからんが負荷が高いからこのほうがいい、と言われた。
0455nobodyさん2005/04/08(金) 23:54:12ID:OhDnlIyM
opendir(DIR, "ls-t./$folder");
じゃなかった。
opendir(DIR, "ls-t./$folder|");
だった。
そもそもこの場合の|の意味がわからんのですが、、、
0456nobodyさん2005/04/09(土) 00:11:56ID:gYWC+2uy
パイプ?なのかなあ。にしても続くコマンドないし、、、
sort -rだと思うのだが、、、
0457nobodyさん2005/04/09(土) 00:34:17ID:gYWC+2uy
ああ、ls-tは日付順の降順だわ。
それなら並び換えはいらんのだが
しかしlsコマンドでいいのかわからん。

0458nobodyさん2005/04/09(土) 00:52:37ID:???
open(DIR, "ls -t ./$folder |") だと思われる
ls -t の出力をパイプで自分に流し込む話
0459nobodyさん2005/04/09(土) 00:58:37ID:gYWC+2uy
なるほどディレクトリ自体の性質を変えずに表示形式出力だけを
加工させるスクリプトに持っていくのかな。
しかし初心者ながらこういうやり方まで頭がいかんかった。
つまりファイル操作ならOSのコマンドで代用すればいいじゃない。
ということが。
0460nobodyさん2005/04/09(土) 01:07:49ID:gYWC+2uy
opendir(DIR, "./$folder");
@dir = readdir(DIR);
closedir(DIR);
for($i=0;$dir[$i];$i++){
#$ts = ($dir[$i] =~ /^\d+\.html/) ?
(stat("./$folder/$dir[$i]"))[9] - 800000000 : ' ';
$dir[$i] = "$ts,$dir[$i]";
}
@dir = sort {$b cmp $a;} @dir;
for($i=$next - 21;$i < $next+100-21 && $dir[$i];$i++){
($ts, $file) = split(/,/, $dir[$i]);
last if $ts eq ' ';
open(R, "./$folder/$file");
$_ = <R>;
close(R);
/<b>([^\<]*)<\/b>/;
$j = $i+1;
print W " $j<a href=\"$file\">$1</a>\n";
}
こういう構造でのスクリプトは古いのだろうか。
open(DIR, "ls -t ./$folder |") で
やればあきらかに負荷軽減になるのだろうか。
0461nobodyさん2005/04/09(土) 01:13:06ID:???
環境や条件にも依るだろうよ
0462nobodyさん2005/04/09(土) 01:34:53ID:gYWC+2uy
windows環境でhttpdソフトでテストする場合
open(DIR, "dir -d ./$folder|");
ということになるのだろうか?
そもそもソースにOSコマンド書いたからといって
OSがどう連動してくれてるか
わからないのだが。
0463nobodyさん2005/04/09(土) 01:53:22ID:gYWC+2uy
間違ったこの場合ならdir /o:-d だわな、、、
0464nobodyさん2005/04/09(土) 02:38:31ID:???
win環境ではcygwin入れてls使えよ
OSコマンドって言ってる時点で(ry
まずは自分が何を知りたいのか整理しろ。
そして質問は分かりやすく謙虚に書け。
0465nobodyさん2005/04/09(土) 02:45:27ID:gYWC+2uy
ああ?
謙虚もクソもあるか。
てめえの言い方も横柄だろうが。
わからねえならそれでいいんだよ。
クソが。
0466nobodyさん2005/04/09(土) 02:56:29ID:???
(;^ω^)ほんと態度の悪い質問者に回答するのは嫌になってくるな
0467nobodyさん2005/04/09(土) 03:02:18ID:???
>>460
パイプを open するとプロセスが別に生成されて
場合によっては shell まで呼び出されたりして
かえって負荷が高くなる場合も多いと思う

まあ結局はケースバイケースだが
0468nobodyさん2005/04/09(土) 03:35:06ID:???
どかんと一発、全ファイルリストを取得してからPerlで処理したほうが効率いいっしょ。
ちょこちょこI/O負荷をかけるよりは。
0469nobodyさん2005/04/09(土) 06:49:56ID:???
使い捨てのスクリプト程度ならOSのコマンド呼び出しで構わないだろうけど、
fork自体のコストが高いから、CGIには向かないかも。

windowsなら、これ入れておけばそこそこunix環境に近くなる。
http://unxutils.sourceforge.net/
0470nobodyさん2005/04/09(土) 11:44:26ID:???
$aが$bの倍数であるかどうかを調べるには
どうすればいいんですか?
0471nobodyさん2005/04/09(土) 12:16:31ID:???
$a % $b == 0
0472nobodyさん2005/04/09(土) 12:46:24ID:???
すべての素数を書きだすスクリプトの書き方を教えてください
0473nobodyさん2005/04/09(土) 13:04:45ID:???
>471
感謝!助かりました!
0474nobodyさん2005/04/09(土) 13:13:25ID:???
>>472
無理
0475nobodyさん2005/04/09(土) 13:26:40ID:???
>>474
じゃ無理なことを証明するスクリプトの書き方を教えてください
0476nobodyさん2005/04/09(土) 13:38:10ID:???
一生計算終わらないからなぁ
0477nobodyさん2005/04/09(土) 13:41:18ID:???
素数は有限個ではないというのはスクリプトで証明するもんじゃないな
0478nobodyさん2005/04/09(土) 14:26:27ID:???
数学でもやってろタコっていう
0479nobodyさん2005/04/09(土) 14:39:34ID:???
print "無理です\n";
0480nobodyさん2005/04/09(土) 15:29:50ID:???
>>472
print 'すべての素数'
0481nobodyさん2005/04/09(土) 22:28:37ID:???
>>480
おまえ頭いいな
■ このスレッドは過去ログ倉庫に格納されています