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

【Perl 】初心者コーナーPart7

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい01/09/12 13:04ID:???
いらっしゃーい、perlのコーディングで困ってる人のスレです。

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

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

参考書籍はこちら【【Perl,CGI】参考書籍 第2版 】
http://corn.2ch.net/test/read.cgi?bbs=php&key=988809842&ls=50
CGIの質問はこちら【CGIだけど、なんか質問ある?part3】
http://corn.2ch.net/test/read.cgi?bbs=php&key=988727833&ls=50

過去ログ、その他の役立ち情報は>>2-5を見よう。
0256名無しさん@お腹いっぱい。01/09/23 20:53ID:???
なる!_gunzipイイ(・∀・)♪
0257名無しさん@お腹いっぱい。01/09/23 21:48ID:???
_gnuzip = この板最強

↑ですか?
0258名無しさん@お腹いっぱい。01/09/23 22:14ID:???
このスレッドのpart2ぐらいからいるね。最初はAA貼ってて痛い人だたけど。
0259名無しさん@お腹いっぱい。 01/09/23 22:29ID:???
痛い人とはなんだ (´Д`;)
実際_gnuzip JAPU両氏のお陰で厨房な俺は随分勉強になってるぞ
特に、コンパイラ読んでるらしい発言はメチャクチャ参考になるよ
Efectiveの脱線話読んでるみたいでとっても いい(・∀・)
026022301/09/24 01:22ID:39bTpAKQ
>>252
あ、 s///; っていらないんですか。
無限ループるかと思ってました。ありがとうございます。

HTML::LinkExtor調べてみます!
0261名無しさん@お腹いっぱい。01/09/24 01:29ID:o1YS9rTQ
スレ違いは重々承知ですが、
このスレに主に住んでいるのでここで質問させて下さい。
作ったページを表示するとエンコードが西ヨーロッパに
なってしまいます。
<HTML lang="ja">
などと入れても問答無用です。
ちなみにブラウザはIEです。
何か良い方法はあるのでしょうか?よろしくお願いします。
0262名無しさん@お腹いっぱい。01/09/24 01:31ID:???
>261
どこに住んでいようと関係ない。
然るべきスレに逝け。
このスレに引き篭もるな。
0263名無しさん@お腹いっぱい。01/09/24 01:41ID:???
引越し準備ととのいましたぁ〜〜;;
いってきまふ・・・。
0264名無しさん@お腹いっぱい。01/09/24 01:57ID:???
いい場所がみつから〜ん!
0265名無しさん@お腹いっぱい。01/09/24 02:22ID:???
みつかった。
それにしてもこの板人すくなぁ〜…。
0266名無しさん@お腹いっぱい。01/09/24 02:34ID:???
漏れも西ヨーロッパになるなあ、気にしないけど w
実際の所HTMLだけで文字コード100%指定するのって不可能なんだよね
charsetの手前でブラウザがコード決め撃ちしちゃったらそれまでだったりして・・
昔はS_JISならheadより手前に<!---あ--->なんておまじないも有ったけど
CGIだったらHTTPヘッダでContent-type指定してやればマシになるのかなぁ
漏れは中国語サイトを良く見るんでaccept-languageをch-1.0とかしてるのが
悪影響と思ってるけど。。。
激しくすれ違いだからSAGE
0267名無しさん@お腹いっぱい。01/09/24 02:43ID:???
CGIだと仮定してみる。
Content-Type: text/html; charset=Shift_JIS
等。
スレ違いだが、まぁ。
0268名無しさん@お腹いっぱい。01/09/24 02:51ID:???
htmlの最初のほうにコメントでその文字コード特有の文字を入れておくとか。
gooのホームページはそうだよね。

でもすれちがいなので下げ。
0269名無しさん@お腹いっぱい。01/09/24 02:59ID:08MV7o4s
その割にgooは文字化け率高いけどな。
トップのスレを下げてもしょうがないのであげ。
0270 01/09/24 03:32ID:???
仕様に適合した UA なら head 内の charset 指定すればいいはず.
もちろん文書中でそれより前に漢字とか使っちゃダメだけど.
ttp://www.asahi-net.or.jp/%7Esd5a-ucd/rec-html401j/charset.html#doc-char-set

関係ないのでやっぱりさげ.
0271名無しさん@お腹いっぱい。01/09/24 04:03ID:???
それを出すならこっちもだろう。

charsetパラメタの勧め: HTMLにおける文字符号化スキームの明示方法
http://www.fxis.co.jp/DMS/sgml/cafe/saloon/html_correct_charset.html
0272もち米100%01/09/24 06:54ID:???
ちょっと漠然としていますが、エラー処理について質問です。
編集前の状態
ファイルA=>0
ファイルB=>0
編集後の状態
ファイルA=>1
ファイルB=>1

こんな感じの処理をする時にファイルBの編集中に例外やSIGTERM喰らって
処理が中断してしまった時ファイルAを0に巻き戻すような処理を行いたいのです。
つまりファイルAとBの時系列の同一性を保ちたいんですが(これって何って呼ぶん
だったかな、、んー)
イメージ的には2chだと、パラメータの汚染チェックが通れば次々ファイルを処理
して行く訳ですが、最終段階のindex.htmの書き換え中にコケてしまうような状態です
例えばショッピングカート等、お金の絡むプログラムだと、これが致命的な欠陥に
なると思うんですが、、中々自分では上手く行きません。

参考になる考え方や本なんかは有りますでしょうか。
0273もち米100%01/09/24 07:18ID:???
んー われながら解りにくい日本語だ。。(-_-...
2chだと あるスレにカキコがあると
datに追記→subject.txt書き換え→テンポラリHTML書き換え→index書き換え
これだけ作業する訳ですが、どれかの更新中にこけてしまうと
それぞれのファイルは不整合をおこしてしまいます。

これを、全ての工程が成功して初めて書き換える、と言う感じで行いたいのです。
今の所テンポラリに書き出して一気にrenameする位しか考えが及びません。
0274名無しさん@お腹いっぱい。 01/09/24 07:59ID:???
知らん、以上。
0275名無しさん@お腹いっぱい。01/09/24 10:37ID:EJKgIokw
一週間でマスターするCGIというのをやっているのですが

アンケートをとるCGIでenquete.datに書き込んでくれません
line11は $data = "$form{'name'}$form{'mail'}\n----------\n\n";
line16は print ENQ $date;
なのですが
これってどういう意味なんでしょうか?

C:\1week\saturday>perl -cw enquete.pl
Name "main::data" used only once: possible typo at enquete.pl line 11.
Name "main::date" used only once: possible typo at enquete.pl line 16.
enquete.pl syntax OK
0276名無しさん@お腹いっぱい。01/09/24 11:05ID:???
ホンヤク白〜〜〜 と言いたいがwcしてるのは感心
mainパッケージの$dataが一回しか使われてないけど、タイポしてんじゃ無いの?

my ($data,$date);
0277名無しさん@お腹いっぱい。01/09/24 11:41ID:RCKEta/A
ありがとうございます
すいませんタイポってなんですか?
0278名無しさん@お腹いっぱい。01/09/24 12:01ID:???
>>277
typo == "typographical error"
ようするに文字の打ち間違い。
0279名無しさん@お腹いっぱい。01/09/24 12:12ID:???
>>272-273
Temporary -> Rename
ってのが簡単に実装出来る手段だというのは間違い無い。
参考になる本は、ム板の参考書スレにあった気がするぞ。
0280名無しさん@お腹いっぱい。01/09/24 12:16ID:W/gfguRs
>>272-273
>テンポラリに書き出して一気にrenameする
これで良いんじゃない・・・?
最後に一連のrenameするときだけシグナルをトラップして
中断されないように配慮すれば。
0281名無しさん@お腹いっぱい。01/09/24 12:50ID:mlN0ge2E
>>278
ご指摘のとうりただの打ち間違いでした

( ´Д⊂ヽううー、ありがとうございました
またヨロシクお願いします
0282名無しさん@お腹いっぱい。01/09/24 12:51ID:???
Win32::OLEを使ったExcelのデータの作成・加工を行おうとしています。

セルへのデータ入力の一括入力は、以下のような方法で可能なのですが、
  @data = (
    [ qw(dataA1, dataB1, dataC1) ],
    [ qw(dataA2, dataB2, dataC2) ],
    [ qw(dataA3, dataB3, dataC3) ]
  );
  $Worksheet->Range("A1:C3")->{Value} = \@data;
セルに入力されているデータをURLの一部として持つHyperlinkを
同様にセルに一括挿入する方法が分かりません。

現状、A1:A3のデータを元にHyperlinkを挿入する際、
  for (my $i = 1; $i <= 3; $i++) {
    $Worksheet->Hyperlinks()->Add(
        $Worksheet->Range("A${i}"),
        "http://www.z.com/" . $data[$i - 1]->[0] . "/");
  }
のようにループを回して処理しているのですが、
データ数が多くなると分単位で時間がかかってしまう点が難点です。

Hyperlinkが定数であれば、下記の一括挿入が可能なのですが、
URLの一部にセルのデータを使用した場合のHyperlinkの
効率的な挿入方法はないものでしょうか?
  $Worksheet->Hyperlinks()->Add(
      $Worksheet->Range("A1:A3"), "http://www._.com/sample/");

VBA寄りの内容かもしれませんが、ご存知の方がありましたら、
ご助言頂ければ幸いです。
0283名無しさん@お腹いっぱい。01/09/24 12:52ID:???
Win32::OLEを使ったExcelのデータの作成・加工を行おうとしています。

セルへのデータ入力の一括入力は、以下のような方法で可能なのですが、
  @data = (
    [ qw(dataA1, dataB1, dataC1) ],
    [ qw(dataA2, dataB2, dataC2) ],
    [ qw(dataA3, dataB3, dataC3) ]
  );
  $Worksheet->Range("A1:C3")->{Value} = \@data;
セルに入力されているデータをURLの一部として持つHyperlinkを
同様にセルに一括挿入する方法が分かりません。

現状、A1:A3のデータを元にHyperlinkを挿入する際、
  for (my $i = 1; $i <= 3; $i++) {
    $Worksheet->Hyperlinks()->Add(
        $Worksheet->Range("A${i}"),
        "http://www._.com/" . $data[$i - 1]->[0] . "/");
  }
のようにループを回して処理しているのですが、
データ数が多くなると分単位で時間がかかってしまう点が難点です。

Hyperlinkが定数であれば、下記の一括挿入が可能なのですが、
URLの一部にセルのデータを使用した場合のHyperlinkの
効率的な挿入方法はないものでしょうか?
  $Worksheet->Hyperlinks()->Add(
      $Worksheet->Range("A1:A3"), "http://www._.com/sample/");

VBA寄りの内容かもしれませんが、ご存知の方がありましたら、
ご助言頂ければ幸いです。
0284名無しさん@お腹いっぱい。01/09/24 12:56ID:???
すみません、一部誤りがありました。

(誤)
  @data = (
    [ qw(dataA1, dataB1, dataC1) ],
    [ qw(dataA2, dataB2, dataC2) ],
    [ qw(dataA3, dataB3, dataC3) ]
  );

(正)
  @data = (
    [ qw(dataA1 dataB1 dataC1) ],
    [ qw(dataA2 dataB2 dataC2) ],
    [ qw(dataA3 dataB3 dataC3) ]
  );

よろしくお願いします。
0285名無しさん@お腹いっぱい。01/09/24 13:16ID:4RAmdUns
>>284
URLの配列を作ってから一括代入するのはどうすか?
@cells = map { [ map { 'http://www.xxx.com/' . $_ } @$_ ] } @data;
$Worksheet->Range("A1:C3")->{Value} = \@cells;
0286名無しさん@お腹いっぱい。01/09/24 13:56ID:???
>テンポラリに書き出して一気にrenameする
~~~~~~~

笑える。
0287名無しさん@お腹いっぱい。01/09/24 13:57ID:???
>テンポラリに書き出して一気にrenameする
           ~~~~~~
0288名無しさん@お腹いっぱい。01/09/24 14:50ID:???
>>285
レスありがとうございます。
舌足らずで、説明不足だったようです。どうもすみません。

実現したい内容は、セル自身はURLそのものではなくリンクの一部を表し、
それを使ったリンクを同じセルに埋め込みたいということです。

例えば、URLの一部になるセルのデータとしてISBNや2chのスレIDなどが入っており、
その隣に書名なりスレ名なりが入力されているような状況を想像下さい。
そして、該当リンクへジャンプするとAmazonや2chに実際に飛んで、
具体的な情報が見れるような使い方を考えています。

実際に考えている使用方法では、セル自身のデータがCGIのquery情報を保持しており、
それ自身が意味を持った値ですので、
セルの値にHyperlinkを直接もつというのは避けたいところです。

引き続き、情報お待ちしております。
0289名無しさん@お腹いっぱい。01/09/24 15:54ID:GhpSecZ2
htmlのformとcgiでアンケートをつくっているのですが
<form method="post" action="enquete.cgi">

"送る"を選ぶとなぜか
"次の場所からダウンロードするように選択しました"
となってcgiのテキストを開こうとします
本のCDからデータをコピーしたので打ち間違えではないのですが、、、

何が悪いのでしょうか?
0290名無しさん01/09/24 15:56ID:1qyod3pU
>>289サーバにアップロードしてないとか
0291名無しさん@お腹いっぱい。01/09/24 15:58ID:???
適切なMIMEが設定されていない、とか。

または、IEの場合、*.cgiのファイルをテキストエディタ等に関連付けしてある状態で、
Content-Type: text/plainのCGIにアクセスすると、ダイアログが出るという状況が確認されています。
0292名無しさん@お腹いっぱい。01/09/24 15:58ID:???
>289
ヘッダの情報が間違ってるとか。
0293名無しさん@お腹いっぱい。01/09/24 16:13ID:GhpSecZ2
ありがとうございます

>>290
ローカルなのですがApache/htdocsに入れました
>>291
*.cgiはメモ帳のアイコンになってますこれがまずいのでしょうか?
>>292
ヘッダってどこのことですか?
0294名無しさん@お腹いっぱい。01/09/24 16:27ID:???
>>293
> *.cgiはメモ帳のアイコン
ですね。関連付けを外したら直るかと。

ヘッダとは、Content-Type: text/plain とかのこと。
0295名無しさん@お腹いっぱい。01/09/24 16:53ID:bJzfeBUI
>>294
ありがとうございます
それでどうやって関連付けを外すのですか?
申し訳無い

Content-Type: text/htmlというのならcgiデータに書いてあります
0296名無しさん@お腹いっぱい。01/09/24 17:17ID:???
text/htmlなのかい。
どうしましょ。

関連付けはwin板ですかね。
0297名無しさん@お腹いっぱい。01/09/24 17:43ID:???
変更しなくて良い。
Wクリックでメモ帳で編集出来るようになってるだけだから。。。
0298名無しさん@お腹いっぱい。01/09/24 17:44ID:AOw736z6
パスワードを暗号化してクッキ〜に保存するにはどうすればいいのですか?
暗号化のやり方がわからない・・・
0299名無しさん@お腹いっぱい。01/09/24 17:53ID:???
>>295
それ良く聞くけど、関連付けは関係無いと思うぞ。
インターネットの(外の)サーバのCGIではそんな風にならないんだろ?
だったら99%httpdの設定だって、WINは知らないけどApacheのconfファイル
見てみ。
>>298
$cryptpass = crypt ($plainpass,salt);
で$cryptpassをURLエスケープする
0300-01/09/24 17:57ID:qSV25GfU
俺、このHP大好き!
http://members.tripod.co.jp/bingo852/
0301名無しさん@お腹いっぱい。01/09/24 18:01ID:???
実際text/plain吐かれるとダイアログは出るぞ。
text/htmlなら何ら関係ないけど。

>>300
よく飽きないね。いい加減ウザイ。
0302名無しさん@お腹いっぱい。01/09/24 18:06ID:???
>>301
そっか・・漏れデバッグの時plainで吐いてるけどなった事無かったから ゴメソ
じゃtext/html出してる前提で
httpd.confを触ってみて、多分Option辺りだと思うから。。
030329501/09/24 18:10ID:bJzfeBUI
ありがとうございます

フォルダオプション-ファイルタイプで削除して
*.cgiがwinのアイコンになったのですが
"送る"を押すとブラウザにcgiデータのテキストが出てきてしまいます

>>299
httpd.confというのは本に書いてあるように設定したのですが、、、
0304名無しさん@お腹いっぱい。01/09/24 18:20ID:???
>>295
とりあえず、そのCGIは具体的に何するんですかね?

掲示板のようなCGIだと仮定してみる。
普通にtext/htmlを返すのが問題無いとして、
余程変にいじってないApacheならば問題ないはずだが。
030529501/09/24 18:22ID:bJzfeBUI
httpd.confの変更点

ServerName 127.0.0.1・・・Servername new host.name下に書き足し
Options FollowSymLinks ExecCGI・・・ExecCGIを書き足し
Options Indexes FollowSymLinks ExecCGI・・・MultiViewsをExecCGI
AddHandler cgi-script .cgi・・・#を削除

perl、cgiのみだと動くのですが、
html、shtmlに組み込むとまったく動きません
030629501/09/24 18:26ID:bJzfeBUI
>>304
htmlのformを使って書き込まれた内容を
cgiを使ってdatファイルに書き込むというモノなのですが、、、
0307名無しさん@お腹いっぱい。01/09/24 18:28ID:???
datに書き込む処理が終わった後、そのdatが表示されるようになってない?
もしくはdatに飛ばしてるとか。
0308名無しさん@お腹いっぱい。01/09/24 18:28ID:???
組み込むって <!---exec** しようとしてるのカー(゚д゚lll)
030929501/09/24 18:41ID:EJKgIokw
<FORM method="POST" action="enquete.cgi">htmlは問題無いと思うのですが
----enquete.cgiの内容----
#!C:/Perl/bin/perl
# ライブラリ
require 'cgi-lib.pl';
# デコードサブルーチン
&ReadParse(*form);
# ライブラリ
require 'jcode.pl';
# 文字コード変換サブルーチン
&jcode'convert(*form,'sjis');
# 連想配列から値だけを取り出し、区切りのハイフンを追加
$data = "$form{'name'}\n$form{'mail'}\n$form{'sex'}\n$form{'age'}\n$form{'kansou'}\n\n----------\n\n";
# 追加書き込みモード
open(ENQ, ">>enquete.dat") || die "File 'enquete.dat' Open Error.";
#flock(ENQ, 2);
print ENQ $data;
#flock(ENQ, 8);
close(ENQ);
# -----ここから出力 -----
print "Content-type:text/html\n\n";
print << "END_OF_HTML";
<HTML>
----お礼のページが開くようです----
031029501/09/24 18:46ID:EJKgIokw
一週間でマスターするCGIって本なので基本的な設定が間違っているのだと思います

データは付属CDからコピぺしたので動くはずなのですが、、、
0311名無しさん@お腹いっぱい。01/09/24 19:16ID:???
つーかhello.cgiで実験すれ、print "Content-type: text/html\n\n<html><h1>hello";
<html><body><FORM method="post" action="hello.cgi">
<input type=submit value="post実験></FORM>
これPOST

生でCGI開いてGET、おかしかったらHTTPDの設定が悪い
検索したら、出てきた。

http://www.shoeisha.com/book/errata/er_detail.asp?bid=1222
http://www.google.com/search?q=WIN+CGI+EXEC+APACHE&hl=ja&lr=lang_ja
0312名無しさん@お腹いっぱい。01/09/24 19:34ID:AOw736z6
>>299
アドバイスありがとうございます。
が・・・全くわかんないです。
簡単なプログラムのソース書いていただけないでしょうか?
お願いします。
0313名無しさん@お腹いっぱい。01/09/24 19:49ID:???
#!/usr/local/bin/perl
print "Content-type: text/html\n\n<html><h1>Hello";
↑ これhello.cgiで保存
<html><body><FORM method="post" action="./hello.cgi">
<input type=submit value="post実験"></FORM>
↑ これhello.htmlで保存
ボタン押しても、直接CGI開けても「Hello」が見えないと駄目
で、何が悪いかと言うと大体Apacheの設定が悪いかWINの設定が悪い

お小言言わせて貰うとさ、「一週間でCGI」←このタイトルからしてダメ
●HTMLが書ける。
●自宅で試すならHTTPDの設定が出来る。
●Perlのプリント文が書ける。
これ3つとも出来ないとまともに動かない、だから一つづつマッタリと
遊びながらやった方が簡単なんだよね。
だから、どかっっとソース貼られてもアドバイスのしようが無い
「結局ドキュメントルート見えてませんでしたっ」とかも良く有る
で上の感じだと多分HTTPDの設定が間違えてるっぽいから
googleのリンクで調べてちょってわけ
0314名無しさん@お腹いっぱい。01/09/24 19:56ID:???
俺も上で結構付き合ってきたけど、
>>311にソースが既に書いてあるのに、>>312見て愕然。

ちなみにスレ違いだったな。
http://corn.2ch.net/test/read.cgi?bbs=php&key=1000804655&ls=50
031531201/09/24 20:00ID:AOw736z6
>>314
スマソ。漏れは下のほうに答えたんです。
パスワードを暗号化してクッキ〜に保存するソースを知りたいんです。
0316ほれ01/09/24 20:15ID:???
http://www.google.com/search?hl=ja&q=perl+crypt%8A%D6%90%94&lr=lang_ja
http://www.google.com/search?hl=ja&q=%83N%83b%83L%81%5B+%83G%83%93%83R%81%5B%83h&lr=lang_ja
031731501/09/24 20:31ID:AOw736z6
>316
ありがとうございます。
暗号化する方法はわかったんですが、どうやってクッキーの保存、読み出しと組み合わせればいいんですか?
0318もち米100% 01/09/24 20:44ID:???
>>279-280
ありがとうございます、やっぱりお手軽なのはリネームになりますか。
ショッピングカートとかこんな感じのトランザクションをどうやって保証してるんだろう
例えば最悪のタイミングでSIG{TERM}投げられたらどうしようとか、
2chの�d�jはsubjectの書き換えで0バイト読み込みしちゃってると思うんですが
考え出すときりが無いですよね。

取り合えずム板の参考書スレを読み直してみます。 レス感謝〜
0319むぎ茶      01/09/24 20:55ID:???
パスワード掛けなければよい  (n

┐(´ー`)┌


┏━━━━━━━━━┓
┃('Д')y ─┛~~ ┃
┃むぎ茶      ┃
┃[email protected]  ┃
┗━━━━━━━━━┛
0320名無しさん@お腹いっぱい。01/09/24 21:18ID:???
一日見ない内に糞スレ。
0321名無しさん@お腹いっぱい。01/09/24 21:58ID:.PROECLA
超初心者な質問なのですが
require'jcode.pl';
&jcode'convert(*data,'sjis');

print"Content-type:text/html\n\n";
if($data eq "hehehe"){

print<<EOF;
<html>
<head>
<title>ビィンゴー!</title>
</head>
<body>
正解じゃい!!<BR>
文句あるんか?
EOF

}

print<<EOF;
間違ってる
</body>
</html>
EOF
exit;

というのを作りました。
間違ったパスを入れるとちゃんと動くのですが、正解を入れると
正解の文字と間違った時の文字の両方が出てきます。
何か間違ってますか?
0322名無しさん@お腹いっぱい。01/09/24 22:07ID:???
>321
if(){}else{}を使おう。
条件分けというものを一から勉強しなおした方がいい。
032332201/09/24 22:14ID:???
>321
一応ヒント。
・正解の時にだけ出すHTML
・間違いの時にだけ出すHTML
・正解でも間違いでも必ず出すHTML
を自分で理解しよう。

間違ったパスを入れた時も、ちゃんとは動いてないぞ。
HTMLソースを見てみな。
0324名無しさん@お腹いっぱい。01/09/24 23:52ID:???
むぎを見たのも久しい気がする。
032532101/09/24 23:52ID:.PROECLA
>322
すいません。勉強しなおして解決することができました。
elseで解決しました。また1箇所構文が間違っていてそれも修正して
うまく動作するようになりました。
ありがとうございました。
0326名無しさん@お腹いっぱい。01/09/25 16:02ID:rq8B7jsc
書き込むほどのことではないのですが
質問しようと思いブラウザを開きましたが、やはり質問する前にもう一度見直してみようと思い
2時間掛けて見直したらどうにか直りました。
何度か見直していたのですがやはり見落としがありました。
どうでもいいことなのですが・・・
0327名無しさん@お腹いっぱい。01/09/25 16:04ID:???
どうでも良すぎる。
0328名無しさん@お腹いっぱい。01/09/25 16:13ID:???
カレントディレクトリのファイル一覧@filesを最終更新順に並び替えるのってどうすればよいでしょうか?
0329名無しさん@お腹いっぱい。01/09/25 16:27ID:???
@file = sort { (stat $a)[9] <=> (stat $b)[9] } @file;
0330名無しさん@お腹いっぱい。01/09/25 16:28ID:???
>>326
構文チェックしよう。
perl -wc hoge.pl

>>328
@files = map { $_->[0] } sort { $b->[1] <=> $a->[1] } map { [$_, (stat)[9]] } @files;
033132901/09/25 16:34ID:???
@file → @files
0332名無しさん@お腹いっぱい。01/09/25 16:40ID:???
>329
statを呼ぶ回数が多くなって効率が悪い?・・・
033332901/09/25 16:55ID:???
#! /usr/local/bin/perl
use Benchmark;
timethese(96, {
'329' => \&prog329,
'330' => \&prog330,
} );

sub prog329 {
opendir(DIR, './');
my @files = readdir(DIR);
closedir(DIR);
@files = sort { (stat $a)[9] <=> (stat $b)[9] } @files;
}
sub prog330 {
opendir(DIR, './');
my @files = readdir(DIR);
closedir(DIR);
@files = map { $_->[0] } sort { $b->[1] <=> $a->[1] } map { [$_, (stat)[9]] } @files;
}

--------------------------------------------------------------------------------------------

Benchmark: timing 96 iterations of 329, 330...
329: 2 wallclock secs ( 1.54 usr + 0.51 sys = 2.05 CPU) @ 46.83/s (n=96)
330: 1 wallclock secs ( 0.56 usr + 0.17 sys = 0.73 CPU) @ 131.51/s (n=96)


結構差が出るな。
0334名無しさん@お腹いっぱい。01/09/25 17:05ID:???
ちなみにファイル&ディレクトリ数が 26個あるディレクトリで計測。

CPU Pentium200MHz
RAM 224MB
HDD 知らん
OS Vine Linux 2.1
Perl 5.6.1
0335名無しさん@お腹いっぱい。01/09/25 17:44ID:???
@files = map { $_->[0] } sort { $b->[1] <=> $a->[1] } map { [$_, (stat)[9]] } @files;

このソート方法、良く見るんだけど未だに理解出来ない。。。
どっか解説してくれるサイトなあい?
0336名無しさん@お腹いっぱい。01/09/25 17:51ID:???
>>335
右から見ていけば分かりやすいかと。
0337名無しさん@お腹いっぱい。01/09/25 17:56ID:vAuR/uTY
map の使い方がやっとYO!
0338名無しさん@お腹いっぱい。01/09/25 17:57ID:zsF862DA
@files = sort {(stat $b)[9] <=> (stat $b)[9]} @files;
と一緒でしょ。やってることは。
0339名無しさん@お腹いっぱい。01/09/25 17:57ID:???
げ、329と一緒じゃん。。
0340名無しさん@お腹いっぱい。01/09/25 17:59ID:???
$ck{$_} = (stat)[9] foreach @files;
@files = sort { $ck{$b} <=> $ck{$a} } @files;
↑
こっちの方が早い
0341名無しさん@お腹いっぱい。01/09/25 18:41ID:???
benchとったけど微妙だな。
まぁお好みで。
0342名無しさん@お腹いっぱい。01/09/25 18:45ID:TUKvDv4A
ENVってどれくらい種類あるの?
0343名無しさん@お腹いっぱい。01/09/25 18:47ID:???
>>342
環境による。
0344名無しさん@お腹いっぱい。01/09/25 18:47ID:???
>>342
自分で調べろ。
keys %ENV
0345名無しさん@お腹いっぱい。01/09/25 18:49ID:???
( ´_ゝ`) フーン
0346まげ01/09/25 22:27ID:???
ちんこがかゆいので
自動チンコかきそふとを作ってください
0347名無しさん@お腹いっぱい。01/09/25 23:27ID:???
家の外にアイスクリームを置いて下さい。
暫らくすると蟻が沢山寄ってくるのでそれをパンツに突っ込んで下さい。
上級者向けだけど・・・・頑張って!!
0348名無しさん@お腹いっぱい。01/09/26 07:22ID:TfbH1r3A
HTTPではじまる環境変数ってどれくらい種類あるの?
0349名無しさん@お腹いっぱい。01/09/26 08:46ID:???
>>348
自分で調べろ。
0350JAPU01/09/26 09:12ID:???
無限にあります。
0351らくだ01/09/26 15:40ID:???
でかいプログラムを書くと自分の作った関数がどこで呼ばれているかが把握できなくなりませんか?
そういうときに簡単に関数の呼び、呼ばれリストが作成できるツールってないのかな?
0352名無しさん@お腹いっぱい。01/09/26 15:46ID:???
関数作る際自分でメモっとけ。
0353らくだ01/09/26 15:55ID:???
なんか開発ツールとかないのかな?
JavaのForteとかJbuilderみたいな。
0354名無しさん@お腹いっぱい。01/09/26 17:11ID:???
>>351
全文検索
0355らくだ01/09/26 17:13ID:???
>>352
てめぇの厨房CGIと違って関数100個以上もあるんだよ。

#!/opt/bin/perl5
print "352 逝っとけ\n";
0356名無しさん@お腹いっぱい。01/09/26 17:15ID:???
>>355 煽りウザイ。死んどけ。
■ このスレッドは過去ログ倉庫に格納されています