Perl コーディング初心者質問コーナー Part35

このエントリーをはてなブックマークに追加
1nobodyさん
いらっしゃーい、Perlのコーディングで困ってる人のスレです。

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

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

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

過去ログやお勧めサイトは >>2-10
2nobodyさん:04/05/26 16:49 ID:kkhhiYmo
関連スレ
【Perl上級者コーナーPart01】
http://pc2.2ch.net/test/read.cgi/php/1024741312/
CGI: Common Gateway Interface part 11
http://pc2.2ch.net/test/read.cgi/php/1055597189/
【Perl,CGI】参考書籍 第三版
http://pc2.2ch.net/test/read.cgi/php/1030209573/
★三 【 スクリプト改造工房 PART 8 】 ★三
http://pc2.2ch.net/test/read.cgi/php/1077525387/
【 スクリプト改造依頼スレ 】(丸投げ)
http://pc2.2ch.net/test/read.cgi/php/1076831972/
△▲ WebProg 初心者の質問 Part8 ▼▽
http://pc5.2ch.net/test/read.cgi/php/1078568723/
【Perl】ファイルロック(排他処理)について語ろう
http://pc2.2ch.net/test/read.cgi/php/1024795138/
★負荷軽減対策委員会(Perl、PHP)★
http://pc2.2ch.net/test/read.cgi/php/1034645635/
【Perl】掲示板を使ろう!
http://pc2.2ch.net/test/read.cgi/php/988890976/
Perlモジュールについて
http://pc2.2ch.net/test/read.cgi/php/997829243/
CGIに依存しないPerlの話題一般/Part2
http://pc2.2ch.net/test/read.cgi/php/1030548610/
3nobodyさん:04/05/26 16:50 ID:kkhhiYmo
4nobodyさん:04/05/26 16:50 ID:kkhhiYmo
5nobodyさん:04/05/26 16:51 ID:kkhhiYmo
6nobodyさん:04/05/26 16:52 ID:kkhhiYmo
 [Document&Tutorial]
 ・Home - Japanized Perl Resources Project: http://perldocjp.sourceforge.jp/
 ・Perl Monks: http://www.perlmonks.org/
 ・use Perl; : http://use.perl.org/
 ・Learn Perl - Perl Education: http://www.devdaily.com/perl/edu/index.shtml
 ・Perldoc.com: http://www.perldoc.com/
 ・Using Perl5 in Web: http://docs.rinet.ru/Using_Perl5_in_Web/
 ・Rex Swain's Home Page: http://www.rexswain.com/
 ・Robert's Perl Tutorial: http://www.netcat.co.uk/rob/perl/win32perltut.html
 ・Perl Tuts: http://savage.net.au/Perl-tutorials.html
 ・Beginning Perl Tutorials: http://www.pageresource.com/cgirec/index2.htm
 ・jcode.pl の私的な解説書: http://www.mikeneko.ne.jp/~lab/kcode/jcode.html
 ・Logical Choice Software, Home Page: http://www.logsoft.com/perltips/
 ・Perlfect Solutions: http://perlfect.com/
 ・The Perl Archive : http://www.perlarchive.com/
 ・Perl6 & Parrot VM についての情報: http://dev.perl.org/perl6/
 ・use Object; : http://perl.infoware.ne.jp/
7nobodyさん:04/05/26 17:13 ID:???
PostgreSQLで、
createuser hoge with password hogeでhogeというゲストユーザを追加し、
権限を持つユーザで、testdbというデータベースに入って、
grant select on testtable to hoge;
で読み取り権限のみを与えたのですが、
DBD::Pgで、このデータベースに接続しようとすると、
DBI connect('dbname=testdb','hoge',...) failed: (no error string)
と言われて繋がりません。
IDとパスを権限を持っているユーザのものに書き換えると繋がるのですが…。
原因がわからず困っています。どなたか知恵を貸してください。
Perl5.6.1、PostgreSQL1.4.2です。
8nobodyさん:04/05/26 17:23 ID:???
スレタイ100回音読汁
9nobodyさん:04/05/26 17:39 ID:???
PerlでのCookieで質問です。
フォームにテキストフィールドが3つあり、POST時にCookieに取り込み、再びフォームのページを表示させるとあらかじめ値が入るようにしています。

  $vaild = ("Tue, 31-12-2030 23:59:59 GMT");
  $cookie_data = "name\:$name<>mail\:$mail<>color\:$color";
  print "Set-Cookie: $title=$cookie_data; expires=$vaild\n";

このようにしているのですが、この状態ですと3つの値が同一のCookieに取り込まれます。
有効期限(この場合は$vaild)も同一ですので、期限が切れれば全部の値が無効になりますが、
この中で特定の値(例えば$colorだけなど)の有効期限を変更するということはできるのでしょうか。
Cookie取得後は3つのフィールドに値が入っていた状態を、一定期間後にフォームのページを見ると2つのフィールドのみに値が入るようにしたいのです。
10nobodyさん:04/05/26 17:44 ID:???
>>9
クッキー別にすればいい。
11nobodyさん:04/05/26 23:44 ID:???
>PostgreSQL1.4.2

釣りか?
12nobodyさん:04/05/27 11:19 ID:???
Possible attempt to put comments in qw() list
という警告が出てしまいます。

もちろん use strict しているのですが、はずしても出ます。
動作上は問題ないのですが、出来れば出ないようにしたいと思ってます。
警告内容は qw() で記述した配列内に # の文字があるのでこれが
コメント文字とバッティングするということだと思います。
どうしても配列要素が膨大で、いちいちクウォートするのを回避できれば
と思っています。
もちろん、no warnings すれば出ないのですが、もっといい方法がない
でしょうか?
1312:04/05/27 11:27 ID:???
すいません、解決しました。 # の要素順番を変えたら出なくなりました。
1412:04/05/27 11:29 ID:???
すいません、やっぱり出ました。もうわからなくなりました。
じぶんがなにものかさえも・・・
1512:04/05/27 12:27 ID:???
何だか直ったりおかしくなったりの繰り返しです。
何がいけないのでしょうか・・・
16nobodyさん:04/05/27 12:27 ID:???
>>12
素直にno warnings使うのがいいと思うがな。そのためのもんだし。
不安ならブロックの中に閉じ込めてno warnings "qw"とかすれば
他の警告への影響も最低限になるだろう。

あるいは

@a = split(/\s+/, <<QW);
foo baa
foo#bar abc
xyz
QW

とかする手もなくはないがそこまでする?
17nobodyさん:04/05/27 13:25 ID:???
>>16
5.005 辺りまではそういう風に実装されてたよ。

#--- test.p ---
my @array = qw(a b c d e);
__END__

> perl5.005 -MO:Deparse test.p
my(@array) = split(/\s+/, 'a b c d e', 0);

> perl5.8.3 -MO:Deparse test.p
my(@array) = ('a', 'b', 'c', 'd', 'e');
18nobodyさん:04/05/27 13:27 ID:???
>>17
ごめん。 s/-MO:/-MO=/g
19nobodyさん:04/05/27 20:42 ID:1K93G7MZ
質問です。
Net::Telnetを使ってroot権限で作業をしたいのですが
suでのログインがうまくいきません。

timed-outになるので恐らくパスワード待ちの状態でタイムアウトしてると
思うのですが正しいコマンドを知っている方いましたら教えてもらえないでしょうか?


my $host = 'host';
my $user = 'user';
my $pass = 'pass';
my $prompt = '/\[.+\]/';
my $supass = 'supass';

my $telnet = new Net::Telnet(
Timeout => 10,Prompt => $prompt,);

$telnet->open($host);
$telnet->login($user, $pass);

$telnet->cmd("su");
$telnet->waitfor(/Password: /);
$telnet->cmd("$supass");
20nobodyさん:04/05/27 20:46 ID:1K93G7MZ
質問です。
Net::Telnetを使ってroot権限で作業をしたいのですが
suでのログインがうまくいきません。

timed-outになるので恐らくパスワード待ちの状態でタイムアウトしてると
思うのですが正しいコマンドを知っている方いましたら教えてもらえないでしょうか?


my $host = 'host';
my $user = 'user';
my $pass = 'pass';
my $prompt = '/\[.+\]/';
my $supass = 'supass';

my $telnet = new Net::Telnet(
Timeout => 10,Prompt => $prompt,);

$telnet->open($host);
$telnet->login($user, $pass);

$telnet->cmd("su");
$telnet->waitfor(/Password: /);
$telnet->cmd("$supass");
21nobodyさん:04/05/27 20:46 ID:1K93G7MZ
質問です。
Net::Telnetを使ってroot権限で作業をしたいのですが
suでのログインがうまくいきません。

timed-outになるので恐らくパスワード待ちの状態でタイムアウトしてると
思うのですが正しいコマンドを知っている方いましたら教えてもらえないでしょうか?


my $host = 'host';
my $user = 'user';
my $pass = 'pass';
my $prompt = '/\[.+\]/';
my $supass = 'supass';

my $telnet = new Net::Telnet(
Timeout => 10,Prompt => $prompt,);

$telnet->open($host);
$telnet->login($user, $pass);

$telnet->cmd("su");
$telnet->waitfor(/Password: /);
$telnet->cmd("$supass");
2219-21:04/05/28 01:38 ID:???
悪気はなかったんです・・_| ̄|●
書き込んだらサーバーエラーになってCtrl+F5押しても
書き込まれてなかったのでうっかり・・・

本当に申し訳ないです。

できれば解答をお願いしたいです
23nobodyさん:04/05/28 01:48 ID:???
>>19-22
- $telnet->waitfor(/Password: /);
+ $telnet->waitfor('/Password: /');
24nobodyさん:04/05/28 03:46 ID:???
$telnet->cmd("su"); → $telnet->print("su");
cmdはプロンプトを待つ。
デバッグするならDump_Logぐらい取れよ。
25nobodyさん:04/05/28 15:08 ID:NnBdFpi6
http://www.kokobbs.com/ahhan/right/right01.html
アッハンという2ちゃん型掲示板を使っているのですが
トリップ設定部分でパスワードを○○と入力→コテが表示
と言う機能を使う際、コテ名を漢字にするとスクリプトエラーに
なってしまいます。
\マークを入れても同様です、どうすればよいでしょうか?
26nobodyさん:04/05/28 16:02 ID:???
聞く場所間違ってるぞ。
配布元にサポートBBSがあるじゃないか。
2725:04/05/28 23:44 ID:NnBdFpi6
すいません私の勘違いでした。
28nobodyさん:04/05/29 14:19 ID:eHv0ssyS
質問です、

1.あるサイトを運営しているのですが、顧客管理のcgi(画面)で、顧客をある条件(性別や年齢)
等で抽出し、そのヒットした顧客を画面に表示し、さらに、チェックボックスでチェックされた
顧客に対してのみsendmail にてお知らせメールを送る機能を追加しようとしています。

2.それで、抽出した顧客の一覧(チェックボックス付き)の画面出力まではできたのですが、
sendmailプログラムにチェックボックスにチェックされたユーザの一覧データがうまく送信されません。

3.エラーはでないのですが、チェックされた顧客が10人あっても一人分しかメール送信されません。

具体的に言いますと

form method=post action=cgi
input type=checkbox name=mail_to value=a
input type=checkbox name=mail_to value=b
/form

で、タイプをチェックボックスとして、cgiに渡します。
この場合、cgiで受け取るデータはどの様な形式で入ってくるのでしょうか?
name が同一の名前なので、 配列 $mail_to[0] $mail_to[1]
かと思ったのですが、違うようですし、 データの内容がカンマで区切られて入ってくるでもないようですし・・

尾永井します

29nobodyさん:04/05/29 14:23 ID:???
>>28
スレタイ嫁
30nobodyさん:04/05/29 14:30 ID:???
全角は(ry
31nobodyさん:04/05/29 14:33 ID:???
>28
標準入力を変数に変換している部分による。
同一の名称のフォームオブジェクトのデータを受け取りたいならその部分を修正しなければならない。
その部分のコードが読めるならなぜ一つしか受け取れないかもわかるはず。
なお、Perlで受け取る時点では「mail_to=a&mail_to=b」などの形で入っている。

ちなみに、こういう場合は同一名称のチェックボックスにならないように工夫する方が一般的。
3228:04/05/29 14:35 ID:eHv0ssyS
>>31

さすが、プロ詳しいですね。
今日は、眠れそうです。サンクスコ
33nobodyさん:04/05/29 15:00 ID:???
>>32
標準(?)のCGI.pmならparamをリストコンテキストで呼べば
複数の値を受け取れたと思う。

@mail_to = $cgi->param('mail_to');
34nobodyさん:04/05/29 16:40 ID:???
普通は同じ名前は避けるべきだろ
3528:04/05/29 17:17 ID:eHv0ssyS
>>33
検索したら、そおゆうのがありました。
サンクス
36nobodyさん:04/05/29 17:54 ID:???
>>34
普通に使うよ。使わない理由も無いし。
37nobodyさん:04/05/29 19:01 ID:UPbtVCfi
open (IN, $file) or die "$!";

while (<IN>) {
# 各行をカンマ区切りで分割
@body = split(/,/, $_);
@data = split(/:/, @body);

ファイルを開いて、カンマで区切った後、それをさらに:で区切ろうと思ったのですがうまくいきません。
どうしたらいいですか?
38nobodyさん:04/05/29 19:18 ID:???
39nobodyさん:04/05/29 19:37 ID:UPbtVCfi
>>38
ありがとうございます。
そんな技があったとですね
40nobodyさん:04/05/29 20:08 ID:???
>>36
いや、ネタはいいから
41nobodyさん:04/05/29 20:21 ID:???
>>40
普通使うぞ。
きちんと配列に格納すれば値をいくつ渡しても配列でらくらく操作。
42nobodyさん:04/05/29 20:23 ID:???
普通の基準を聞きたいな。
少なくとも俺は使わない。
今までは使っているソースを見たこともない。
43nobodyさん:04/05/29 20:28 ID:???
配列を使わない方が普通と言わんとばかりの煽りだな(プ
44nobodyさん:04/05/29 20:36 ID:???
まぁ、使う場合は使うよな。普段はそんなに使わないが
45nobodyさん:04/05/29 21:07 ID:???
ifの文章でなら書けるのですがもっと簡単に書ける方法がないか教えてください。

if ($pass eq aa ) { $name = "ああ";}
if ($pass eq bb ) { $name = "いい";}
if ($pass eq cc ) { $name = "うう";}
if ($pass eq dd ) { $name = "ええ";}
 ・
 ・
みたいなのがずっと続くんですが。。
46nobodyさん:04/05/29 21:23 ID:???
my $name_list = {'aa' => 'ああ' , 'bb' => 'いい' , 'cc' => 'うう' , 'dd' => 'ええ'};
$name = $name_list->{$pass};
47nobodyさん:04/05/29 22:12 ID:???
48nobodyさん:04/05/29 22:39 ID:???
>>42
CGI.pmが許しているというのは普通の基準にはならないかね。
49nobodyさん:04/05/29 22:44 ID:???
>>42みたいに経験が乏しかったり勉強不足の奴が見たことないとか言ってもなぁ・・・
50nobodyさん:04/05/29 23:04 ID:???
そんなにいじめるなよ
初心者はこうして一つ一つ知識を蓄えていくんだから生暖かく見守ろうぜ
51nobodyさん:04/05/29 23:05 ID:???
>>42を翻訳機に通してみた。

普通の基準は俺。
少なくとも俺は使い方が分からないから使えない。
今まで他人のソースを見たこともない。
52nobodyさん:04/05/29 23:07 ID:???
checkboxのnameにせっせと異なる名前を付けているのはある意味滑稽だな。
53nobodyさん:04/05/29 23:13 ID:7xFl3dBX
URL入力のフォームにデフォルトのvalueで「http://」を入れてます。
それしかなかった場合に変数$homeに「URL」を、
http://の後ろに入力されてた場合$homeにアンカー付きの「<a>URL</a>」を入れたいと思ってます。

【書いたソース】
if ($in{'url'} == "http://") { $home = "URL"; }
else { $home = "<a href=\"$in{'url'}\" target=\"_blank\">URL</a>";}

こうすると、http://の後に入力していてもアンカー無しの「URL」が表示されてしまいます。
間違いをご指摘ください おねがいします!
54nobodyさん:04/05/29 23:19 ID:???
>>53
演算子について学ぼう
55nobodyさん:04/05/29 23:21 ID:???
56nobodyさん:04/05/29 23:34 ID:???
>>54-55
_| ̄|● お恥ずかしい

if ($in{'url'} eq "http://")
で解決しました。
ありがとうございました!
57nobodyさん:04/05/29 23:44 ID:???
>>52
それが普通
58nobodyさん:04/05/29 23:52 ID:???
>>57 無知を指摘されたからってそんなむきにならなくてもいいんジャマイカ。
59nobodyさん:04/05/30 00:19 ID:???
使わないって言ってる人は理由があるの?
必要ないからっていうのは無しね。
使うことによって、楽になる場面はいっぱいあるんだし。
60nobodyさん:04/05/30 00:22 ID:???
checkboxにまで無理して噛み付く奴の知識ってどの程度なのだろう。
htmlもろくに出来ないのにプログラミングですか。
それはそれで凄いですね。
61nobodyさん:04/05/30 00:34 ID:???
あれでしょ、今ごろHTMLの仕様とか読んで自分の誤りに
気づいて顔真っ赤にしてるんでしょ。
62nobodyさん:04/05/30 00:54 ID:gNGGvGZX
ちょっとみなさんバカなボクに知恵をかしてください

カウンタのような役目をしている変数$winというのがあるんですが
この$winが100の倍数ごとにある処理をしています。

そこで$win_nextという変数で次の100までの回数を表示したいのです。
例えば$weが48だと$we_nextが52となったり、281だったら19になったり、といった風な感じです。

いろいろやってみましたが何回やってもできません。

↓例えばこういう風なのとか・・・
$win_next=($win+100-($win-($win/100*100)))-$win;
63nobodyさん:04/05/30 01:00 ID:???
>>62 お前も演算子に付いて学ぼう
64nobodyさん:04/05/30 01:14 ID:???
>>34=>>40=>>42=>>57で合ってるよな?
恥ずかしいやつが一人しかいなくてよかったよ・・・
65nobodyさん:04/05/30 01:15 ID:???
>64
少なくともその一つだけ俺だから違う。
66nobodyさん:04/05/30 01:24 ID:???
二人も居たのか?
それはそれで兵共が集うスレですね。
67nobodyさん:04/05/30 01:30 ID:???
>>62
$win % 100 は100で割った余りに相当する。
68nobodyさん:04/05/30 01:50 ID:???
>>65
そうか、どいつなのかはわからんが。
個人的趣味で異なる名前を付けるならそういうコーディングスタイルなのだろう。
でも避けるべきとか普通は使わないとか見たことないとかは明らかに
無知あるいは応用が利かないとしか言えないな。
もうちょっといろいろ勉強したほうがいいね。
69nobodyさん:04/05/30 01:51 ID:???
>>59
きっと、KENTやレスキューが使ってないからだよ。
70nobodyさん:04/05/30 02:00 ID:???
>>68
いつまで粘着してんだ?
キモイぞ
71nobodyさん:04/05/30 02:04 ID:???
レス番間違えたの?
それとも粘着の意味を取り違えてるの?
72nobodyさん:04/05/30 02:08 ID:???
うわ。。。
痛すぎる
自分が粘着してることに気づいてない粘着は一番嫌われるよ。
まぁ、リアルでそうなんだろうが
73nobodyさん:04/05/30 02:09 ID:???
>>68=>>71
もういいよ
74nobodyさん:04/05/30 02:10 ID:???
>>71
これを機に、日本語学んでみてはいかがでしょうか?
75nobodyさん:04/05/30 02:12 ID:???
まぁ餅付け
76nobodyさん:04/05/30 02:13 ID:???
75 名前: nobodyさん [sage必死に当り散らしてるなカナリイタイ] 投稿日:04/05/30 02:12 ID:???
まぁ餅付け



いや、お前が一番痛いよ・・・
メル欄引っ掛けとかキモ杉
77nobodyさん:04/05/30 02:14 ID:???
>>76
>>75は誰か引っかかると思って書いてるんだよ
メル欄晒しはもう少し待ってやるべきだった。
>>75ないてるぞ・・・
俺知らない
78nobodyさん:04/05/30 02:15 ID:???
>>68=>>71=>>75
もういいよ
79nobodyさん:04/05/30 02:15 ID:???
877 :nobodyさん :04/05/30 02:02 ID:???
perlを勉強中です。

CGI呼出し時にurlの引数に配列を直接入れる事は可能でしょうか?

PHPでは出来ると聞いて、perlでやってみてるのですが上手くいきません。

具体的には、以下の様にしました。
hoge.cgi?huga%5B%5D=1&huga%5B%5D=2&huga%5B%5D=3

また、この方法が無理な場合は、$huga=1,2,3で代入して送って
受け取ったCGIで@huga=(1,2,3)で代入したいのですが、urlの
; / ? : @ & = + $ ,
以上は特別な意味を持つようなのですが、
, を %2Cにエンコードして送信すれば問題有りませんでしょうか?

おまえらにタイムリーな話題ですよ
http://pc5.2ch.net/test/read.cgi/php/1078568723/l50
80nobodyさん:04/05/30 02:16 ID:???
納得させられる説明ができなくて粘着どうこうしか言えないのはかなりイタイな。
81nobodyさん:04/05/30 02:16 ID:???
>>80
だからいつまで粘着してるの?
82nobodyさん:04/05/30 02:17 ID:???
checkboxの変数名ごときでここまで荒れる>>80が素敵☆
付き合おうよ★
83nobodyさん:04/05/30 02:22 ID:???
>>81
だからいつまで粘着してるの?
84nobodyさん:04/05/30 02:23 ID:???
今度は顔真っ赤にしてオウム返しか
典型的な厨房だな。
宿題して寝ろよ
85nobodyさん:04/05/30 02:25 ID:???
とりあえず言えること

checkboxを学べ
それは板違いだ

お前ら板違いの話題で良くここまで盛り上がれるな。
86nobodyさん:04/05/30 02:26 ID:???
>>80=>>85
傍観者側に回ったフリ乙
87nobodyさん:04/05/30 02:27 ID:???
>>86
だな

>お前ら板違いの話題で良くここまで盛り上がれるな。
コレは仕掛けた本人が必ずといって良いほど言う
88nobodyさん:04/05/30 02:29 ID:???
と説明できないやつが必死に叩こうとしてるw
89nobodyさん:04/05/30 02:37 ID:???
もういいよ
w=必死
90nobodyさん:04/05/30 02:44 ID:???
>>89
やっと自分の間違いを認めたか。
わかったよ。
91nobodyさん:04/05/30 02:48 ID:???
>>90
レス番間違えたの?
それとも日本語を理解できてないの?
92nobodyさん:04/05/30 02:52 ID:???
>>91
これを機に、日本語学んでみてはいかがでしょうか?
9362:04/05/30 03:14 ID:???
%を忘れてました_| ̄|〇
愚問スマソ
94nobodyさん:04/05/30 04:31 ID:???
perlでスクリプト組んでいて、Flashのサイズを取得するためにPHP+GDを使いたいんですが
perlからサイズ取得スクリプト(PHP)を実行して帰って来た結果をperl側で取得することは不可能でしょうか?
教えて下さい。お願いします。
95nobodyさん:04/05/30 04:36 ID:???
可能


はい、終わり。
後はグーぐるでね
96nobodyさん:04/05/30 11:27 ID:???
     /\⌒ヽペタン
    /  /⌒)ノ ペタン
  ∧_∧ \ (( ∧_∧
 (; ´Д`))' ))(・∀・ ;) < 餅つけ
 /  ⌒ノ ( ⌒ヽ⊂⌒ヽ
.(O   ノ ) ̄ ̄ ̄()__   )
 )_)_) (;;;;;;;;;;;;;;;;;;;)(_(
97nobodyさん:04/05/30 17:22 ID:???
>>94
こんなモジュールを見つけたよ。
http://search.cpan.org/~ysas/SWF-File-0.33/lib/SWF/Parser.pm
&headersubコールバックを定義しておけば、perlだけで情報が取れそう。
9894:04/05/30 17:43 ID:???
>>97
``;でコマンドラインからPHPを実行してサイズ取得できました。
そのモジュールも検討してみます。
ありがとうございました。
99nobodyさん:04/05/30 20:27 ID:???
思い通りにいきません。エラーが出ます。。
どのように書き直せばいいのでしょう?

$i1,$i2 = split("_",$name);
$name = $i1$i2;
100nobodyさん:04/05/30 20:31 ID:???
>>99
安いのでいいから一冊本買った方がいい
101nobodyさん:04/05/30 20:43 ID:???
>>99
検索で調べることもできないような人の来るところではありません。
102nobodyさん:04/05/30 20:49 ID:???
>>99
スレの趣旨には合っているがあまりに酷すぎる。>>100の言うとおりに教科書買え。

($i1,$i2) = split("_",$name);
10399:04/05/30 21:48 ID:???
>>100-102
すいません。一応教科書など持ってます。
()は完全にわすれてました・・。
が、()をつけてもエラーが出ます。。
104nobodyさん:04/05/30 21:50 ID:???
じゃあ、別の場所でエラーが出てるんだろ。
エラーログをよく見ろ。
10599:04/05/30 22:07 ID:???
Scalar found where operator expected at ../bbs/bbs.cgi line 651, near "$i1$i2"
(Missing operator before $i2?)
syntax error at ../bbs/bbs.cgi line 651, near "$i1$i2"
../bbs/bbs.cgi had compilation errors.

なんですが。
106nobodyさん:04/05/30 22:07 ID:???
>>103
学校でせんせーに聞いてこい。

$name = $i1 . $i2;
107nobodyさん:04/05/30 22:47 ID:Mg+ccEmx
はずかしいな
108nobodyさん:04/05/30 22:53 ID:???
2行にバグ2個も書くな。
109nobodyさん:04/05/31 00:25 ID:???
まあスレタイに相応しい質問だけどな(w
110nobodyさん:04/05/31 01:09 ID:???
ここは初心者が自信を持てるインターネットですね。
111nobodyさん:04/05/31 06:12 ID:???
たまに日本語すら危うい質問があるから、それに比べたら…
112nobodyさん:04/05/31 22:39 ID:1T44mYBt
質問
list.txtの、一番上の行にテキストを追加したいのですが

open(OUT, ">> list.txt");
@list = <OUT>;
unshift (@list,"追加の行<br>\n");
print(OUT "@list");
close(OUT);

このようにやると、一番下の行に追加されます。
どこが間違ってるのでしょうか?
113nobodyさん:04/05/31 22:45 ID:???
ここ>>open(OUT, ">> list.txt")
114nobodyさん:04/05/31 22:45 ID:???
openの使い方を学べ
115nobodyさん:04/05/31 22:52 ID:???
2、3のレスで解決する質問ばかりでのどかだな〜
116112:04/05/31 23:05 ID:???
おかげさまで!
open(IN, "list.txt");
@list = <IN>;
unshift (@list,"追加の行<br>\n");
close(IN);
open(OUT, "> list.txt");
print(OUT "@list");
close(OUT);

できましたぁー!
読み込みと書き出しは同時にできないってことでしょうか?
117nobodyさん:04/05/31 23:08 ID:???
118nobodyさん:04/05/31 23:08 ID:???
>>116
できますからもっとよく調べてください
119112:04/05/31 23:12 ID:???
>>118
ありがとう・・・
しらべるっち!!
120nobodyさん:04/05/31 23:41 ID:???
今、CGI本片手に掲示板を作っているのですが、
特定の状況?(原因が不明)で下記のエラーが出てしまいます。

Illegal division by zero at C:\www\home\bbs.cgi line 2020.

エラーが出ない場合は普通に書き込めるのですが・・・。
自分なりに原因を探ってはみたのですがお手上げです。
何卒ご教授下さい。宜しくお願いします。
121nobodyさん:04/05/31 23:44 ID:???
>>120
スレ違い。
つーか、どこで聞いても同じ。
なぜエラーメッセージを読まない?
122nobodyさん:04/05/31 23:58 ID:???
いつも通り

英 語 が 読 め な い ん で す

とかじゃねーの
どちらにせよ典型的な真性厨ですな
123nobodyさん:04/05/31 23:58 ID:???
>>120は、割り算ってケーキを人の数で割ることだから
ケーキを0人で割ると誰にも分けなくていいから全部わたしのもの、とか考えてるツルペタ。
12419-22:04/06/01 00:18 ID:???
>>23-24

できました!ありがとうございます。
レス遅くなってすみません。
125112:04/06/01 00:46 ID:g7eZEVaT
すいませーん追加で質問です。
>>116のようにして書き足していったlist.txtを覗くと、データが

追加の行<br>
 追加の行<br>
  追加の行<br>
   追加の行<br>

のようにヘンなインデントがついてるんです
なぜでしょうか?
126nobodyさん:04/06/01 00:57 ID:???
<q cite="http://www.kt.rim.or.jp/%7ekbk/perl5.005/perldata.html#Scalar_value_constructors">
配列変数は、ダブルクォート文字列中で、配列のすべての要素を変数 $"
(Englishでは $LIST_SEPARATOR) 中に示す区切り文字 (デフォルトは
スペース) でつなげて展開されます。以下は同値です:

  $temp = join($", @ARGV);
  system "echo $temp";

  system "echo @ARGV";
</q>
127nobodyさん:04/06/01 06:06 ID:???
なんでprintするときリストを""で囲むかね。
たぶんスカラー変数を""で囲むのを普段から何の疑いも無くやっていて、その延長で
リストを囲んだらおかしくなったってパターンなんだと思うけど。
そうやれ!とか書いてある参考書でもあるの?
128nobodyさん:04/06/01 07:54 ID:???
答えろよ
129nobodyさん:04/06/01 10:22 ID:???
print "@data"と
print @data
はPerlだと挙動が違うんだよねぇ
勉強しろよ
130112:04/06/01 11:58 ID:???
>>127-129
ありがとうございました。勉強になりました。
ソースは他人のソースを参考に書きました。
131nobodyさん:04/06/03 20:11 ID:???
イメージ検索エンジンを作ろうとしているんですが、
画像に埋め込まれているメタデータとキーワードが一致しているかどうかで、
検索をしているイメージ検索エンジンってありますか?

<img src="map.jpg" alt="地図" title="日本地図">
↑のaltやtitleの部分や画像周りのテキスト、ファイル名などを
検索するのがGoogleだと思うんですけど、
画像に組み込まれている日付だとか著者とかをキーワードと一致するか、
検索するシステムが無ければ作ろうと思うのですが、
どなたか上記のような検索システムがあれば、教えてください。
無ければトライしてみようと思います。
132nobodyさん:04/06/03 21:05 ID:???
>>131
スレ違い
133nobodyさん:04/06/04 07:10 ID:???
varatermを使ってるんですが、シェル(bash)の標準入力ではbackspaceで
後の1文字を消せるんですが、スクリプトで<STDIN>で入力する時に、
backspaceを使うと、^Hが表示されて文字を消すことができません。
どうすれば文字を消せるようになるのでしょうか。
Perl 5.6.1、Debian 3.0を使っています。
134nobodyさん:04/06/04 07:25 ID:???
>>133
それはソフトの問題じゃないのか?
135nobodyさん:04/06/04 07:33 ID:???
>>133
^H返すのってわりと普通の動作じゃないんですか?よく聞くんですけど
俺のスクリプト使う奴は全員backspaceコードに^H使うな!
とは言えないので…。
136nobodyさん:04/06/04 08:42 ID:???
>>133
それ、Debianのせいじゃない?
どのバージョンでどうなのかは知らんけど。
ttp://www.fastwave.gr.jp/diarysrv/mad-p/200205c.html#20020525-1
Linux板のほうがいいかも。
137nobodyさん:04/06/04 10:24 ID:???
>>136
あー、なるほどそうだったんですか…。
どうもありがとうございました。
138nobodyさん:04/06/05 07:36 ID:HWhcKEoW
今170行ほどのプログラムを書いたのですが、可視性が悪いので処理ごとにサブルーチンかしようかと思うのですが
それだと処理の重さ軽さなどは変わりますか?
139nobodyさん:04/06/05 07:47 ID:???
ベンチマークとってみれ
140nobodyさん:04/06/05 09:45 ID:HWhcKEoW
>>139
どうやるの?
141nobodyさん:04/06/05 09:49 ID:???
use benchmark;
142nobodyさん:04/06/05 13:37 ID:tmR5KH99
ひらがなをカタカナに変換したいのですが、以下のようにするとなぜか"アゥ"と出力されます。何故なんでしょうか?
(UNIX, perl v5.8.0)

#!/usr/bin/perl
$str = "あい";
$str =~ tr/あいうえお/アイウエオ/;
print $str;
143nobodyさん:04/06/05 14:05 ID:???
ひらがなやカタカナがマルチバイトだから。
144nobodyさん:04/06/05 14:41 ID:6aQba7Dj
>>142
解決策1: Jcodeモジュールのtrを使う

use Jcode;
$str = "あい";
print Jcode->new($str)->tr('あいうえお','アイウエオ');

解決策2: unicode機能を使う

use utf8;
use encoding 'euc-jp', Filter=>1;

$str = "あい";
$str =~ tr/あいうえお/アイウエオ/;
print $str;

use encodingのとこのeuc-jpは適当に自分が使っている
コードにあわせてくれ。
145未承諾広告※ ◆TWARamEjuA :04/06/05 15:05 ID:CuLBZ8wK
>>144
5.8.0 環境とのことですので後者の方ですね。
146nobodyさん:04/06/05 15:06 ID:???
フォームを使わずに、POSTでデータを送る事は出来ませんか?
プロ固定金土日こと星山成寿(李明煕/イ・ミョンヒ)
の2ちゃんねるワンポイントアドバイスの時間です。

長年プロ固定してますので、削除とか他人のIP抜き取り個人情報調べ、
2ちゃんねるのアングラの仕事など西村博之の右腕として広範囲な仕事を
任されております。一般に2ちゃんねるは、収益を上げてない個人管理の掲示板
かのように思われていますが、各トピックごとに様々な人間がアクセスしてくる
ため、それらのIPで個人情報を調べた名簿を企業に売買しすることにより、
裏側では巨大な収益をあげております。DHCの裁判でいきなり5億円もの損害賠償
を請求されているのも、彼らの独自の調査によって2ちゃんが裏側で稼いでいる
情報がばれているからにほかなりません。2ちゃんねるでも、ほんの一部の幹部
しかしらない情報としましては、「薬・違法掲示板」の名簿を、覚醒剤の売買
組織に、売り捌いていることです。これに関しては、アングラマネーなので当然
税金もかからず、実は一番の巨大な利益は「薬・違法掲示板」で集まった
シャブ中連中の個人情報を組織に転売することにより得ています。
最近それらの情報に警察や公安が気づき始めたため、西村博之の実家には何度も
ガサ入れ(家宅捜査)に入られており、逮捕への証拠固めとして、国家権力が
動き始めて、かなり立場的には危険になったことは確かです。ですので、
以前ほど堂々と、そのような行為もできなくなってきているので、私も住居を
転々としている次第です。あっ、このことについては、本当に危ない話
なので、他言しないでくださいね。もしばれた場合は、ネタ情報として
逆にでたらめな似通った情報をたくさんネット上に流すことにより、煙に
まいてください。大抵の場合、ガセの情報をたくさん流せば、またネタが
始まったと、冗談で終わります。以前オウム真理教が毒ガスサリンを
自分たちが作っているのに、毒ガスで命を狙われたなどと自作自演した
作戦と同じ手口ですね。よろしくお願いします。
148nobodyさん:04/06/05 15:21 ID:???
>>146
できます
149146:04/06/05 15:39 ID:???
>>148
良かったらやり方を教えていただけませんでしょうか。
150nobodyさん:04/06/05 15:52 ID:???
そんな質問をしているぐらいなら教えてもわからんだろ。
何をしたいか詳しく書け。
151146:04/06/05 16:11 ID:???
パスワードを使ってログインしてファイルを編集する
というCGIなのですが、編集時にもう一回パスワード照合したいんです。
もう一回パスワード入力するのも面倒なのでログイン時に入力したパスワードを
編集用のCGIに渡したいんですが、どうすれば良いでしょうか。
分かりにくくてすみません。
152nobodyさん:04/06/05 16:19 ID:???
>>151
それならフツーは hidden で渡すんじゃないの?
別にCookieを食わせてもよいけどさ。
153nobodyさん:04/06/05 16:25 ID:???
>>151
フォームを使わずにっていうから何かと思ったらそんなことかよ・・・
そんな単にページ変移毎にパスワードを必要とするありふれた仕組みぐらい
工夫して書けよ。
ほとんどどんなスクリプトでもやってることだろ。
そんなことならスレ違いだし他のスクリプトでも見て勉強してちょうだい。
154nobodyさん:04/06/05 20:33 ID:jT/a/NFi
すみません質問です。

Perlにてファイル内の特定文字を検索するにはどういうコードを書けばいいでしょうか?
ファイルの中身を全部配列に入れてjoinして強引に検索出来そうな気もしますが
もっとスマートな方法あったら教えてもらえますでしょうか?
155nobodyさん:04/06/05 21:35 ID:???
>>154
ここはコーディングスレなんだからまずは自分で書いてみろ。
156nobodyさん:04/06/05 23:00 ID:???
>>154
whileで一行ずつ読み込んではパターンマッチかけるとか

つか、どういうのを「スマート」と想像してるかの方に興味がある
157nobodyさん:04/06/06 00:41 ID:timkGFaS
>>144
有り難うございます。
そういう方法しかないのですね。それでやってみます。
158nobodyさん:04/06/06 17:31 ID:RQ9IWgny
Perl5.6.1で変数がスカラーかどうかを判断するにはどうすればいいですか?
159nobodyさん:04/06/06 17:34 ID:???
>>158
$名前ってのがそうです。

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

1: 自分はこう言う事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
160158:04/06/06 17:49 ID:RQ9IWgny
説明不足ですみません。
変数に代入されている値がスカラーかハッシュへのリファレンスかで
処理する内容を変えたいのですが,プログラム内部でそれを判断する
方法はないでしょうか?
161nobodyさん:04/06/06 17:49 ID:???
下記のようなごく初歩のプログラムがあるんですけど
$noって=$filenameですよね?
なぜ$filenameを$noで再度置き換える必要があるのでしょうか?
後、print "$no";で一度記述してるのに
後にif文で再度同じ事をしてるのはなぜですか?


#! /usr/local/bin/perl

# ログファイル名
$filename = "count.txt";

# ファイルを開く
if (!open(FP,"$filename")) { # 失敗
$no = 0;
} else { # 成功
$no = <FP>;
close(FP);
}


# 1つ増やす
$no++;

print "$no";

if (!open(FP,">$filename")) { # 失敗
print "ファイル $filename がオープンできませんでした ($!)\n";
}else{
 print FP $no;
close(FP);
}
162nobodyさん:04/06/06 18:01 ID:???
>>161
> $noって=$filenameですよね?
既にこの時点で(略
163nobodyさん:04/06/06 18:42 ID:???
>>160
ref <変数> でリファレンスかそうでないかがわかるよ。
リファレンスじゃないなら偽。
リファレンスなら、種類によってARRAYとかHASHとかが返される。
164nobodyさん:04/06/06 18:56 ID:kS2UjgnM
フォームのテキストボックスに「にほんご」と入力し送信したところ、
「\x{0082}ノ\x{0082}ル\x{0082}\x{00f1}\x{0082}イ」
と、表示されてしまいました。

「use encoding 'shift_jis';」を指定しており、
もし「use encoding 'shift_jis';」の一行を取り除くと、
ちゃんと「にほんご」と表示されます。

「use encoding 'shift_jis';」を指定した場合も、、
「にほんご」と表示されるようにするには、どうしたらよいでしょうか。

環境
ActivePerl 5.8.3 Build 809
Windows XP Pro SP2, IIS
165164:04/06/06 18:57 ID:kS2UjgnM
受信のソースです
--- ここから ---
use CGI;
use encoding 'shift_jis';

$cgi = CGI::new();
$text1 = $cgi->param('text1');

print <<EOM;
Content-type: text/html

<HTML>
<BODY>
$text1<br>
</BODY>
</HTML>
EOM
--- ここまで ---
166160:04/06/06 19:09 ID:???
>>163
うまくいきました。ありがとう。
XML::Simpleで取り出したデータ構造が,同じ階層でスカラだったり,
ハッシュだったりしたので困ってました。

漏れが買った本には載ってなかったけど新しい関数だからかな?

<参考>
ttp://www.futomi.com/cgi-bin/lecture/perl5ref.cgi?MODE=CATEGORY&CATENO=21
ttp://www.futomi.com/cgi-bin/lecture/perl5ref.cgi?MODE=DISP&FUNC=ref
167161:04/06/06 20:05 ID:ZCQZgjkY
この部分イフの前にプリントしてる
のに後にイフで再度書き込もうとしてるのはなぜですか?

print "$no";

if (!open(FP,">$filename")) { # 失敗
print "ファイル $filename がオープンできませんでした ($!)\n";
}else{
 print FP $no;
close(FP);
}
168nobodyさん:04/06/06 20:18 ID:???
なぜですかと聞かれても、必要があるからじゃないですか?としか答えられないの。私。

print "$no";

if (!open(FP,">$filename")) { # 失敗
print "ファイル $filename がオープンできませんでした ($!)\n";
}else{
 print FP $no;
close(FP);
}

print "$no";

したらどうよ。
169nobodyさん:04/06/06 20:20 ID:???
>167
後ろの方には FP が入ってるわけですが、そこんとこどうよ?
170nobodyさん:04/06/06 20:35 ID:ZCQZgjkY
print "$no"; がhtmlへの書き込みを示してて、
print FP $no; がcount.txtへの書き込みという事ですか?
171nobodyさん:04/06/06 20:38 ID:???
おっ、上達してきたぞ。
172nobodyさん:04/06/06 20:39 ID:???
ちょっと違うな。
とりあえずファイルハンドルを知れ。
173nobodyさん:04/06/06 21:03 ID:???
ファイルハンドルとはファイルにつける
固有名詞で通常大文字で記述する。
print FP $no;
のような形式はファイル自身に書き込むこと。

ですよね?
あれ?なんでファイルハンドルつける必要あるのですか?
174nobodyさん:04/06/06 21:04 ID:qBVB6Avx
すみません。
benchmark.pmを使った際の出力結果
例えば
0 wallclock secs ( 0.02 usr 0.00 sys + 0.02 cusr 0.01 csys = 0.05 CPU)
というのは何を表すのでしょうか(処理時間であるということぐらいはわかりますが)
wallclock secs,usr,sys,cuser,csys,cpuってそれぞれなんなんですか?
usrはユーザ側の処理時間??

あと同じCPUでも
0 wallclock secs ( 0.02 usr 0.00 sys + 0.02 cusr 0.01 csys = 0.05 CPU)
2 wallclock secs ( 0.02 usr 0.00 sys + 0.03 cusr 0.00 csys = 0.05 CPU)
のようにwallclock secsに大きな違いが出るのは何故なんでしょうか?
175nobodyさん:04/06/06 21:20 ID:???
wallclock secs: 実時間(起動してから終わるまでの時間)
usr: (そのプログラム自身が)ユーザモードで消費したCPU時間
sys: (そのプログラム自身が)カーネルモードで消費したCPU時間
cusrとcsysはそのプログラムから起動された子プロセスが消費した分
最後のx.xx CPUはそれらの合計。

実時間は他のプログラムが動いていたり、IOの待ちがあったりすると
かなり変動する。
176nobodyさん:04/06/06 21:49 ID:???
>>174 ついでに有効桁も学習しとけよ
177nobodyさん:04/06/06 22:43 ID:???
糞の>>160のはいなくなったか。
二度と来るなよ。 ( ゚д゚)、ペッ
178nobodyさん:04/06/06 23:24 ID:ZCQZgjkY
ほっ、俺じゃなかった。
179nobodyさん:04/06/06 23:33 ID:???
>>178
で、理解できたのか?
180nobodyさん:04/06/06 23:42 ID:???
>>164
S-JISで書いていないんじゃないのか?
181nobodyさん:04/06/06 23:47 ID:???
>>179
もう一回参考書読んできます。
いまいちファイルハンドルの意味自体わかってない気がするので。
182nobodyさん:04/06/06 23:53 ID:???
>>181
ファイルハンドルはどうでもいいんだけど、最初の「if文で再度同じ事をしてる」は
書き方がヘタなだけだろう。
183nobodyさん:04/06/06 23:56 ID:???
>>182
あのスクリプト自身があまりうまく出来てないと言うことですかね、
と言うことは私の疑問もあってるんでしょうか。
一応参考書の例文なのですが。
184nobodyさん:04/06/07 00:05 ID:???
参考書じゃああいう書き方で説明することはあるのかもな。

疑問とは?

>$noって=$filenameですよね?
これか?違う

>print "$no"; がhtmlへの書き込みを示してて、
これか?違う

>print FP $no; がcount.txtへの書き込みという事ですか?
これか?そう
185nobodyさん:04/06/07 00:49 ID:T5+evT2p
3万個ほどファイルがあるディレクトリを開いて、readdirでリストを取得すると、
数十〜数百個ほど取りこぼしがあるのですが、これって既出ですか?

もしそうならすいません。確実に取得できる方法はありますか?

ファイル名でソートしてちゃんと時系列で処理をしたいのですが、この問題のために
作れなくて困っています。
186nobodyさん:04/06/07 00:59 ID:???
>>185
そのコードを見てみたいものだな。
187nobodyさん:04/06/07 01:04 ID:???
>>184
1個目、2個目なのですがまず1個目は
$filenameから読み込んだ数値を$noとするということでしょうか?
2個目だけはどうしても必要とは思えないのですが。
その後、ifで再度書き込まれるわけですし。
188nobodyさん:04/06/07 01:13 ID:???
189nobodyさん:04/06/07 01:36 ID:???
>>187
>$filenameから読み込んだ数値を$noとする
そう。ファイルハンドルをスカラ変数に代入は1行読み込み。

>2個目
print "$no"; は標準出力へ$noの値を出力。
print FP $no; はファイルへ$noの値を出力(書き込み)。

必要あるなしなんて書いたやつがそうしたかったのだろうよ。
190nobodyさん:04/06/07 01:39 ID:???
>>187
名前に元質問のレス番を入れろ。
コーディングスレなんだから「私の疑問も・・・」とか「1個目、2個目」なんて
書かずにどのコードについてなんなのかもうちょっと文章を考えて書け。
191nobodyさん:04/06/07 04:40 ID:???
ものすごく基礎的な事なんですけど……。
どこがおかしい、もしくは基本的に間違いと言う所をご指摘願います。

#行数・項目数(, 区切り)とも不確定のCSVファイルを読み込み、
#@page2 に $page[n行目][n項目] と言った感じの2次元配列で格納したい

open (IN, "./link.csv");
my @page = (<IN>);
close (IN);

my (@line, $i, @page2);
$i = 0;
foreach (@page){
@{$line[$i]} = split(/,/);
push(@page2, @line);
}
print $page2[3];

#@page2 の中の3行目を表示したいけど、結果は ARRAY(0x155c7c8) と出る
#$page[3][3] とすると、最後の行の目標項目が表示される
192nobodyさん:04/06/07 05:02 ID:???
>>164
しっかりファイル頭でuse宣言してる?
193nobodyさん:04/06/07 05:53 ID:???
194191:04/06/07 06:53 ID:???
>>193
ありがとうございます。
まさに知りたかった事が載ってました。
ここ読んで、やり直してみます。
195nobodyさん:04/06/07 08:45 ID:mlYstQXa
>>175さん
ありがとうございました。

>>176
有効桁は・・・昔BASICをやってたときに#をつけると倍精度とか・・・
(よくわかってないんで自分で調べてみます)
196164:04/06/07 12:47 ID:c3dnKsSQ
>>180 >>192
ようやく解決できました。

>>165 のように書いてしまっていたので、指摘の通り、
「use encoding 'shift_jis';」をまずはじめに書くように直しました。

なおかつ、それでも化けていたのですが、
「use encoding 'shift_jis';」に「Filter=>1」を加えたところ、
ようやくきちんと「にほんご」と表示できました。
どうもです。
197nobodyさん:04/06/07 13:27 ID:???
質問です。
サブルーチンの呼び方に関してなのですが、例えばjcodeですと
jcode'convert (*value, "sjis");  ← Perl4
jcode::convert (\$value, "sjis");  ← Perl5
などの書き方ができますよね。
Perl5ならどちらの記述でも動きますが、
Perl4にも対応させるなどの汎用性という面では、
常にPerl4の記述で書いたほうがいいのでしょうか?
198nobodyさん:04/06/07 13:39 ID:???
使わなきゃいいじゃん。

↑ >>197がいいこと言った!
199nobodyさん:04/06/07 13:49 ID:???
CGIとして配布するならともかく、
わざわざ古い書式を使うこともあるまい。
200nobodyさん:04/06/07 13:50 ID:???
>>197
君が赤ラクダを持っているならともかく、今時 Perl4 で
問題なく動くスクリプトを書く方が難しいと思うがな。

jcode'convert(*value, "sjis"); # ×
&jcode'convert(*value, "sjis"); # ○

ま、自己満足以外のメリットは殆どないが、やりたきゃご自由に。
http://flex.ee.uec.ac.jp/texi/perl/perl_toc.html
201nobodyさん:04/06/07 14:25 ID:???
赤ラクダのヨブの話は好きだったんだが
あれを Perl5.8 対応にしてヨブが粘土板を UTF-8 で刻むようなチュートリアルが読みたい
202nobodyさん:04/06/07 17:08 ID:SF6UmQvx
This is perl, v5.8.0 built for i386-linux-thread-multi です。
あるデレクトリのテキストファイルのみを取得したいのですが、

opendir DIR, '/home/foo/bar' or die;
@files = grep { -f }readdir DIR;
print join("\n", @files);

とすると空でなにも表示されません。2行目を

@files = grep { !-d }readdir DIR; # デレクトリではないもの

とするとデレクトリ以外のファイルが取得できます。
ファイルテスト演算子「-f」では取得できないのですか?
203nobodyさん:04/06/07 17:45 ID:???
>>202
readdir で得られるファイル名はフルパスでないからぢゃよ
204202:04/06/07 17:51 ID:SF6UmQvx
>>203
返事、ありがとうございます。
そうかとも思ったんですが、ならば !-d で判定できているのは…んん?

えーとあれですかね、この場合判定できているのではなくて、
存在しない->よって「!-d」も真値が返ってきてる、って事ですか?
つまり判定できているわけではないってこと?
205202:04/06/07 17:54 ID:SF6UmQvx
>>204
すいません、フルパスで -f で大丈夫でした。
お騒がせしました。
206nobodyさん:04/06/07 20:46 ID:UI3v3779
スレ違ったので移動

掲示板CGIにアクセス解析CGIを組み込みたいと思ってます。
Bodyの中にタグとして書き出すのでなく、CGIの中で完結させたい
(ソースを見てもわからないようにしたい)のですが、
具体的にどのようにすればいいのでしょうか。
サブルーチンで解析CGIを呼び出す、というヒントは読んだのですが
呼び出しの記述の仕方がわかりません。
なんとなくこんなふう書くのではないかと思うのですが↓

sub access {
  ??? = './acc/acc.cgi?a=b&&c=d';
}

どなたかアドヴァイスおねがいできませんか!
207nobodyさん:04/06/07 20:55 ID:???
>>206
改造スレで見てもらったほうがいいよ。
208nobodyさん:04/06/07 20:59 ID:???
検索したほうがいいよ
209nobodyさん:04/06/07 21:02 ID:SF6UmQvx
あるcommand があり、
system("/home/hoge/bin/command arg > file");
とするとcommand の出力はfileに書き出されます。

@array = system("/home/hoge/bin/command arg");
としても@arrayには何も格納されません。

シェルから
$ /home/hoge/bin/command arg
とすると出力が画面に表示されます。

command の仕様には「標準出力に表示します」とあるだけです。

訳あってこれ以上の情報が取得できない状況です。

command の出力を変数に取り込むにはどうすればいいんでしょうか。
210nobodyさん:04/06/07 21:02 ID:???
一つ言えるのは掲示板なんぞに解析し込む馬鹿はキモイ。
ついでにプログラミングは100年は早い。
211206:04/06/07 21:08 ID:???
>>207
ありがとう、そうします。
212nobodyさん:04/06/07 21:14 ID:???
>>208
アクセス解析 掲示板cgiに 埋め込む

などでは検索しましたが・・・
何かいい検索ワードあったら教えてください。
213nobodyさん:04/06/07 21:16 ID:???
一つ言えるのは掲示板なんぞに解析し込む馬鹿はキモイ。
ついでにプログラミングは100年は早い。
おまけに日本語を喋れない。
214nobodyさん:04/06/07 21:29 ID:???
215209:04/06/07 21:32 ID:???
>>214
@array = `/home/hoge/bin/command arg`;
なんですね。
ありがとうございました。
216nobodyさん:04/06/08 01:10 ID:???
ちょっとお聞きしたいのですが、
例えば

@data = 1 2 3 4 5 〜 100

があり その中のある数にもっとも近いモノからソートすると言う事は出来るでしょうか?
例えば↑の配列 5 に一番近い数字からソートすると 4 6 が先頭の並び順になる…というような感じなんですが…。
ちょっと無理っぽいような気もするのですが可能ならば何卒お教え下さいませ。
217nobodyさん:04/06/08 01:36 ID:???
absでワンクッション挟め
218nobodyさん:04/06/08 01:47 ID:???
>>216
> 5 に一番近い数字からソートすると 4 6 が先頭
どっちなんだよ?

@new = sort(grep($_ >= 5, @data));

5を好きなように変えれば?
219nobodyさん:04/06/08 06:03 ID:???
>>216
@data = sort{ abs($a-5) <=> abs($b-5) } @data;
220nobodyさん:04/06/08 14:30 ID:???
perlのcrypt関数でパスワードをcryptし、

user(add|mod) -p 暗号化パスワード -s /bin/true -d /home/www/アカウント アカウント

でユーザの追加、変更を行っているのですが、例えば、「test」というパスワードを設定
すると、「test」でも「test999」でも「test48278467276484」でもFTPで認証できてしまい
ます。つまり、「test*」で認証できてしまいます。
「test」をusermodで「test876」にしても、上記同様関係なく「test*」で認証できて
しまいます。

デフォルトで用意されている「admin」というアカウントではこのような症状にはなら
ないので、どうもuseradd|mod側で使っている「-p」の暗号化したパスワードが怪しいの
ですが、解決に結びつかず、1日が経過してしまいました。

もしも何か解決策がありましたら、どうかご教授ください。
221nobodyさん:04/06/08 15:41 ID:???
>>220
OSはなによ?
デフォのcrypt関数ならそれで正常。
222nobodyさん:04/06/08 15:52 ID:???
>>220
8文字以降無視ってのはよくきくしそういう仕様だけど、
4文字でだめってのは初耳だ。
223nobodyさん:04/06/08 16:04 ID:???
ほっとけよ。
perlに関係ないことだ。
224nobodyさん:04/06/08 17:13 ID:???
>>221
普通cryptは先頭8文字だが
225nobodyさん:04/06/08 17:50 ID:???
ディレクトリを無理やり削除するには
system ("|rm -r $dir");
で桶ですか?
226nobodyさん:04/06/08 18:10 ID:???
-rf
227220:04/06/08 18:48 ID:???
皆様、ご返答有難うございます。
現在も模索中でございます。

>>221
Redhat9です。

>>222
「testtest」と設定しても、testtest*になって
しまうようです、、、
228nobodyさん:04/06/08 19:02 ID:???
数字と英文字混ぜてテストしてみたか?
229nobodyさん:04/06/08 20:17 ID:???
>「testtest」と設定しても、testtest*になって
>しまうようです、、、

とりあえずそれは正常だ。
230220:04/06/09 02:55 ID:???
>>228
「test123test」とやってみましたが、同じように「test123test*」
で認証できてしまいました。

>>229
正常なのですか?
はじめから用意されていた「admin」というアカウントでは、
このパスワード入力方法では通用しませんでした。
231nobodyさん:04/06/09 03:05 ID:???
>>230
板違い。Linux板へ逝け。
232206 :04/06/09 06:49 ID:siBsh0Gf
>>206 です
改造スレできいてみましたが、あちらでもスレ違いなのだそうです。
やはりここしかないのかと思います。
あちこち行ってますが、重複投稿でなく誘導ということでご容赦ください。

>>206のようにcgiでcgiを呼び出して使ってる方はいないでしょうか?
requireでもopen(<IN>, "**.cgi")でも駄目でした。
検索をしても、cgiのBody内に解析のタグを仕込む方法ばかり出てきてしまいます。
ヒントだけでもよいのでおねがいいたします。
233206:04/06/09 06:59 ID:???
ひょっとしてこんな簡単な話ではないのでしょうか・・?
234nobodyさん:04/06/09 07:00 ID:???
だから無理だって言ってんだろうが。
235nobodyさん:04/06/09 07:45 ID:???
>>220
crypt(3)よく読め
236206 :04/06/09 07:51 ID:???
>>234
配布先のFAQには

>アクセスログの取得がばれるとまずいと言う場合は、なんとかPerlを勉強して、
>CGIの中からサブルーチンとしてアクセス解析を呼ぶなどの方法で対処して
>いただければと思います(ここまでくると手法としてはけっこう厄介ですが)。

と書いてあったんです・・・。
勉強して対処しろ、と書いてる人に具体的方法は聞けないと思い
私なりに調べたり試したりしましたが答えが出ませんでした。
237nobodyさん:04/06/09 07:58 ID:???
>>236
しつこい。
二度と来るな。
238nobodyさん:04/06/09 08:54 ID:???
>>236
どの方法を取るにしても、スクリプトを書き換えないと無理。

一番簡単な方法は、クエリ部分を引数(ARGV)で取るようにして、
``かqx//かsystemあたりで呼び出す。
分からなければ、Perlの入門書をどうぞ。
239236 :04/06/09 10:36 ID:???
>>238
ありがとうございます。調べてみます!
240nobodyさん:04/06/09 11:04 ID:???
お前ら優しすぎ
241nobodyさん:04/06/09 11:17 ID:???
242nobodyさん:04/06/09 13:31 ID:???
優しくして得するのは優しくした方
243nobodyさん:04/06/09 14:24 ID:???
親切は人の為ならずってか。

今回の対応が親切だろうか?
よーく考えてご覧。
むしろ自分の首をしめてるのが良く分かるだろう。
244220:04/06/09 15:33 ID:???
>>231
Linux板で板違いだと思ったのでこちらで質問させて
いただいたのですが、また板違いでしたか。
すみませんでした
245nobodyさん:04/06/09 16:06 ID:jOx/oerj
2ちゃんねるは優しさの塊ですから。
246nobodyさん:04/06/09 16:12 ID:???
バファリンより凄いじゃないですか!?
247nobodyさん:04/06/09 21:22 ID:???
>>246
違う違う落ち着いてよく考えろって。
バファリンは2ちゃんねるを内包してるんだよ?
248nobodyさん:04/06/09 23:17 ID:???
リファレンスをうまく使えるようになるたくて色々試してるんですが、クエリを標準入力から
もらって、一つの連想配列にキーと値にわけて収納するというのを、リファレンスでやりたい
んですが

@test = qw/sda-1we pj-odfao of-134t/;

foreach $a(@test){
($x,$y)=split('-',$a);
$form={$x,$y};
}

print %$form;
>of134t

当たり前の結果ですが上書きされて行って最後の代入結果だけ残ります。上書きさせずに
一度に$formの中に標準入力からのデータのリファレンスを作るのはどうやればいいでしょうか。

少し言葉が変かもしれないですがごめんなさい。
249248:04/06/09 23:23 ID:???
言い忘れてました。

$form{$x}=$y;
$ref=\%form;

以外でやりたいんです。なんかリファレンスを普通の変数のように作成したいと思いまして。
250248:04/06/09 23:32 ID:???
2回目まであげてしまってごめんなさい。

ところで、javascriptでは関数内でグローバル変数を使うなって言われますけど、
perlでもメソッド内であまりグローバル変数を使わないほうが良いんでしょうか?

リファレンスもローカル変数化するべきでしょうか?
251nobodyさん:04/06/09 23:32 ID:iD3wLltH
こちらで聞くべきか悩みましたが・・・間違っていたらすいません。

http://yougo.ascii24.com/gh/search/

への用語検索をHP内に埋め込んでいるのですが、
ソースをEUCで記述すると、入力した言葉が文字化けして送られてしまいます。
何か良い解決策などは無いでしょうか?

ソースは、↓のように作っていて、JISで記述した場合は正常に動きました。

<FORM method="GET" action="http://yougo.ascii24.com/gh/search/"
<INPUT TYPE="text" name="pattern"><INPUT TYPE="submit" name="pattern">
</FORM>
252nobodyさん:04/06/09 23:33 ID:???
$form = { map{ split /-/ } @test };
253nobodyさん:04/06/09 23:35 ID:???
>>250
グローバル変数は基本的に使わないほうがいいんじゃ?
当然リファレンスも
あと、>>252>>249にね

>>251
で?
254248:04/06/09 23:55 ID:???
>>252-253
ありがとうございます。あとから
@test2 = qw/q 1 w 2 e 3 r 4 t 5/;
をさっきの$formのりファレンスに追加したい場合もあるなと思って試してたら返事が遅くなりました。
まだできてませんけど;

メソッド内でのグローバル変数はやはり禁止にしたほうが何かといいですよね。
メソッド1での代入結果をメソッド2で使うんですが、リファレンスにしてそれだけ
呼び出し元にreturnで返そうと思います。(まだテストしてないので可能かはわかりませんんが・・・)

とにかくありがとうございました!
255251:04/06/09 23:58 ID:iD3wLltH
>>253
入力した値が、文字化けせずに日本語のまま、正常に送られるようにしたいのです。
わかりにくい日本語ですいません・・・
256nobodyさん:04/06/10 00:00 ID:???
>>254
うん?よく意図が読み取れないけど、メソッドっていうなら、普通にメンバ変数?(間違った言葉使ってるかも)に代入すればいいだけじゃ?

sub method1{
  〜〜〜
  $self->{hogehoge} = "unko-";
  $self->method2();
}

sub method2{
  〜〜
  print $self->{hogehoge};
}

みたいに。
257nobodyさん:04/06/10 00:02 ID:???
>>255
向こうがJISだったら、JISで送るしかないんじゃ?
<form>タグのencなんたらってのでこちらの送信するときの円コードは変えることができると思う。 ブラウザの挙動は知らないけど。
258nobodyさん:04/06/10 00:05 ID:???
>>257 IEは無視するよ
>>251 いい加減板違い気付けよ
259nobodyさん:04/06/10 00:10 ID:Zv7Yb66M
>>251
微妙にスレ違い。<form ... ACCEPTCHARSET="shift_jis">
260248:04/06/10 00:10 ID:???
sub method{

my @test1 = qw/q 1 w 2 e 3 r 4 t 5/;
my @test2 = qw/y 6 u 7 i 8 o 9 p 0/; #この行はまだ実験中なので無視してください。
my $form;
$form={map {split /-/}@test1};

return $form;

}

$form=&method;

print $form->{q};

一応動作はしますがなんか変な感じですね。

>>256
$selfは
my $self=shift;
とかをメソッドの初めにしてるということですよね?
今まで、うまくオブジェクト指向ちっくな部分が理解できてませんでしたけど、
なんかもの凄いヒントもらった気がします。ちょっと考えてみます。
261nobodyさん:04/06/10 00:18 ID:???
>>260
うぬ? 微妙にわかってないかな。 my @test1 = qw/q 1 w 2 e 3 r 4 t 5/; なら、別に'-'でsplitする必要はないので、$form = { @test1 }でいいんじゃないかな。
あと、@array = qw/a A b B c C/; %hash = @array;と、
%hash = qw/a A b B c C/;で、%hashの中身は、同じね。

{}んで、囲んだたら中のリストの内容がぎじぇりgへおりgはえおじぇいrひあえhrがれがえrげhてぇt
ごめん、なにいってるわからなく。

>
262248:04/06/10 00:27 ID:???
>>261
splitの部分は途中で@test1の中身を変えてしまったままを忘れてました。

>あと、@array = qw/a A b B c C/; %hash = @array;と、
>%hash = qw/a A b B c C/;で、%hashの中身は、同じね。
なんとなくで思ってましたが>>261さんのおかげで、確信がもてました。

$self->{hogehoge}="文字列";
はリファレンスのアドレス?メモリ番号といいますか、それが決まる前に値を入れる・・・
というか、値を入れるのと同時にアドレスも持つみたいな感じを以前に読んだ気がします。

かなり良い感じになってきたので、解説サイト行って勉強しなおしてきます。今なら前より
理解できそう。
263251:04/06/10 00:37 ID:outd/ELT
>>259
ありがとうございます。しかし、その内容では駄目なようでした・・・
板違いスイマセンでした。この内容だとHTMLなのかな・・・?
264248:04/06/10 09:53 ID:???
sub method{
my $self = shift;
my @test1 = qw/a-9 b-67 c-876 d-765/;
my @test2 = qw/e-rt f-asdd g-fgf/;
$self->{form}={map {split /-/}@test1,map {split /-/}@test2};
}

sub method2{
my $self=shift;
my @test=qw/a b c d e f g/;
print map{$self->{form}{$_}@test;
}

$self->{form}をデリファレンスするのに今はこんなやり方しか思いつかないんですが、
method2でわざわざ@testに$self->{form}の各キーを代入しないでもいい方法はないでしょうか。

$$self{form}でもアドレスが出てくるので、$$$self{form}でいけるかなと思いましたがやはり
駄目でした。

265nobodyさん:04/06/10 10:01 ID:???
>>264
keys %{$self->{form}}
266248:04/06/10 10:09 ID:???
>>265
!?ありがとうございました。%{$self->{form}}カーリーブレスつけると全部表示されるんですね。
267248:04/06/10 11:41 ID:???
メソッド内でのグローバル変数をなくそうと色々試してるんですが、基本的な考え方としては

(モジュールの場合)
コンストラクタ
sub new{
my $self = shift;
bless {
data1 => {qw/a 1 b 2 c 3/},
data2 => {qw/d 4 e 5 f 6/}
},$self;
}
で初期化しておいてmethodに$a={qw/a 2 b 4 c 6/}を投げたら
sub method{
my $self = shift;
my $a = shift;
$self->{data1}={%{$a}};
}
のように$self->の中身に処理結果を反映させて行く。みたいな感じでいいでしょうか?
これなら一応グローバル変数は排除できるっぽいです。



268nobodyさん:04/06/10 12:02 ID:Niohn4Xp
ひと月分の予定表で質問です。
以下の様にして予定表のリストから名前と年月が一致した予定を配列に入れて
foreach $yotei(@yotei) {
chomp $yotei;
($yo_name,$yo_year,$yo_mon,$yo_day,$yo_kaisi,$yo_end,$yo_naiyou) = split(/<>/,$yotei);
if ($name eq $yo_name) {
if ($yo_year eq $year) {
if ($yo_mon eq $month) {
$h_yotei[$yo_day] = $yo_naiyou;
}
}
}
}

後で、次の様にして表示しているのですが、これだと1日に1件の内容しか表示できません。
for(my $i=1;$i<=$lastday;$i++){
print "<td>$h_yotei[$i]</td>\n";
}
1日に複数の内容を表示させるにはどのように変更すればいいでしょうか?
269nobodyさん:04/06/10 12:40 ID:???
>>268
push @{$h_yotei[$yo_day]}, $yo_naiyo;
に変えて、
for(my $i=1;$i<=$lastday;$i++){
print "<td>$_</td>\n" foreach @{$h_yotei[$i]};
}
とかか?
なんかしっくりせんけど。
270nobodyさん:04/06/10 13:56 ID:???
>>268
月の日数文のファイルをつくって、ファイル名はもちろん年月日とかで。

そんでifにかけて真ならファイルオープンして中身を表示とかは?
これなら新しく予定を書きこむのも、新しい日付分のファイルを作るのもperlで可能。
素人も使えるようにUIもperlで整えればいいのでは?
271270:04/06/10 13:58 ID:???
CSVにでもして、名前の検索は年月日該当のファイルを開けてからやるみたいな。
272nobodyさん:04/06/10 14:00 ID:???
>>271
会社で使うならそれでもいいね。社員のその日の予定が社長は一覧できるし。
273nobodyさん:04/06/10 17:01 ID:???
>>267
$self->{data1}={%{$a}};
これは、$aをデリファレンスして、んで、リファレンスを取ってるから、±0なことをしてると思うよ。
$aにハッシュのリファレンスが入ってるんだから、$self->{data1} = $a;でok

あと、この辺の話題になると、ム板のPerlスレにいったほうがいい。
274nobodyさん:04/06/10 17:35 ID:???
>>273
ハッシュのコピーをしてるんじゃないの?

こうじゃなくて

$self->{data1} = \%{$a};

ならたしかにお前のいうとおりだが。
275267:04/06/10 17:50 ID:???
>>273
$self->{data1}={%{$a}};

ありがとうございます。アドレスごと書きかえるだけでいいんですね。でも、アドレスごと
書き換えた場合は( {%{$a}} でも同じですけど )初めにコンストラクタで作られた
$self->{data1}のメモリ使用領域はどうなるんですか?

$self->{data1}はアドレスを格納しているだけなので、後でアドレスを書き換えたとしても
書き換え前のアドレス先には値が保存されているままなのでしょうか?

それとすみませんが、ム板っていうのはどこでしょうか。webpg板とweb制作板くらいしか使った事ないのですみません。
276nobodyさん:04/06/10 17:56 ID:???
>>274
あ、あぁ、そういうことか

>>275
$self->{data1} = $a;とした場合は、$self->{data}->{hogehoge}を変更したら、$a->{hogehoge}も変更されると思う。
ム板->プログラム板
277nobodyさん:04/06/11 12:04 ID:???
質問いいでしょうか。文字列と数値の扱いです。
例ですが、data.txtに
1<TAB>2<TAB>3
と入っているとします。

$file="data.txt";
open(DATA,"<$file");
@line=<DATA>;
以下略

配列にデータを格納します。
QUERY_STRINGにxxx.cgi?num=3などとあって、この数値と配列の中身を評価する時ですが、
num=3の3は数値としてとらえてもいいと思うのですが、
$fileから読み出した文字列が数値である場合、それは文字列として評価するべきなのでしょうか、それとも数値として扱っていいのでしょうか。
ex.1 if ($num == $line[0]) {
ex.2 if ($num eq $line[0]) {
こういう扱いの違いについてです。
278未承諾広告※ ◆TWARamEjuA :04/06/11 13:52 ID:9CQ7zNJb
>>277
都合の悪いときのことをいろいろと想像してみると楽しめるんじゃないかなぁ。
279nobodyさん:04/06/11 14:05 ID:???
数値比較の場合、num=xxxとやると0と一致するね。
文字列比較の場合、num=03とやると3と一致しないね。
280nobodyさん:04/06/11 20:43 ID:???
perlを始めて数ヶ月の超初心者です。split関数についての質問です。
文字列を分割して配列に格納するまでは良かったのですが
配列の最後の文字列だけを取得する方法がわかりません。

$0で取得した/var/tmp/hoge.plのファイル名だけが欲しくて
$filename = (split(/\//,$0))[2];
としてみました。ディレクトリ変更する場合も考えて頭から数えないで
最後の文字列を取得できればと思います。
どなたか、ご教授よろしくお願いします。

281nobodyさん:04/06/11 21:01 ID:???
($filename)= $0=~ m!([^/]+)$!
282nobodyさん:04/06/11 21:04 ID:???
>>280
[-1]ってやってみ。
283nobodyさん:04/06/11 21:30 ID:???
配列じゃなくちゃだめなの?

use File::Basename;
my $filename = basename $0;
とかは?
284280:04/06/11 21:32 ID:???
>>282
ありがとうございます。無事、ファイル名を取得する事ができました。
これで半日悩んでた自分がバカでした。修行を積んできます。

>>281
申し訳ありません。自分のレベルじゃまだまだ理解不能です。
今後の課題のひとつにしたいと思います。
ありがとうございました。
285280:04/06/11 21:36 ID:???
>>283
数分違いでレス遅れました。
自分のレベルじゃ配列ぐらいしか思いつきませんでした。
basenameは、今後の参考にさせていただきたく思います。
ありがとうございました。
286nobodyさん:04/06/12 00:34 ID:???
PERLのコメントって

my $a = "aiueo" ;      #コメント
の時に今まで半角スペースでやってたけどもしかしてTabでも問題ないの?

プラットフォーム全て共通でTabでもokかな?
287nobodyさん:04/06/12 00:36 ID:???
意味分かんないよ
ごめんね
このスレの住人では力になれないようだ

まずは日本語からだ!
288286:04/06/12 00:55 ID:???
>>287
俺へのレス?
コメント開始までの見やすさのための空白にTabを使っていいのかなっていう質問。
Tabキーを押すと入力されるやつね。

なんかTabってソフトウェアによってコードが違うとか聞いた事あるから、もしかして
UNIXとWINDOWSでは違うのかなと思ったり、そもそもperlのコメント前にそんなの使って
いいのかなと・・・・

やっぱり日本語変かな・・・ごめん
289nobodyさん:04/06/12 00:58 ID:???
ここで聞くより自分で試した方が早い気が・・・
そんなに手間のかかることじゃないし。
290nobodyさん:04/06/12 00:58 ID:???
>>288
ホワイトスペース
291286:04/06/12 01:15 ID:???
>>289
2行もレス付けてくれるならyes|noも言って欲しい・・・・・

>>290
かなりのプログラミング言語ではホワイトスペースはどれだけ会っても半角スペース1分として認識される。
みたいなことが見つかった。使っていいんだろうけど、不安。だから誰かに大丈夫と言って欲しい。
292nobodyさん:04/06/12 01:39 ID:???
大丈夫
293nobodyさん:04/06/12 02:10 ID:???
ていうか、タブは\tだろ
入れ子をわざわざスペース4個でやれと?
アフォの子ですか?
294nobodyさん:04/06/12 02:15 ID:K+1+iYDq
質問です。

1. aタグでcgiにリンクします。
2. まずそのcgiは、aタグをクリックした人のIPアドレスを取得します。
3. その取得したIPアドレスを(毎日0:00にリセットされる)IPリストと照合します。
4. IPリストに同じIPアドレスがあれば、リンク先に飛ばしません。
5. IPリストに同じIPアドレスがなければ、IPリストにそのIPアドレスを書き込み、リンク先に飛ばします。

一日に二回以上、同一IPアドレスからの訪問を拒否するCGIです。

ここで質問ですが、そのリンク先に残るリファラはCGIになるのでしょうか?
このリファラをaタグの貼ってあるHTMLのままにすることは可能でしょうか?
295nobodyさん:04/06/12 02:25 ID:???
>>293
ソースの半分がスペースって割と見るぞ
>>294
方法によっては可能
296286:04/06/12 02:35 ID:???
>>292
ありがと!かなりすっきりした!

>>293
憎まれ口を叩きながらも教えてくれてありがと。

>>295
結構普通にありますよね。それで俺もなんかあるのかなと
297286:04/06/12 02:43 ID:???
>>293の入れ子発言で思ったけどPERLにもHTMLの倫理マークアップのように正しい
関数の使いかたってあるのかな?

結構元もとの関数の意味を考えて使うと、何の処理なのかわかりやすいかもね。

例えばforeachとmapはmapの方が処理速度は速いけど、mapは返り血を出すから、
返り血が必要ない時には使わない。とかって・・・・意味ないか・・・
倫理マークアップの必要性をを軽く勘違いしちゃったね;
298294:04/06/12 10:23 ID:K+1+iYDq
>>295
レスありがとうございます。
どのような方法か簡単に教えていただけませんか?
299nobodyさん:04/06/12 10:52 ID:???
簡単に教えると、ヘッダだ
300nobodyさん:04/06/12 11:50 ID:???
巨大なファイルで、刻々と追加書き込みされるような場合、
ファイルを開いた時点のファイルサイズがEOFになるのでしょうか?
それとも、追加書き込みされた分も読める?
301nobodyさん:04/06/12 11:56 ID:???
>>300
読んだ時点でのEOFまで読める。
経験上、Linuxは糞で偶に嘘読まされる。信頼性が必要な時は他のプリミティブで同期取らないとだめぽ。
302294:04/06/12 12:01 ID:K+1+iYDq
>>299
ではもう少し詳しく教えていただきたいです。
303nobodyさん:04/06/12 12:05 ID:???
>>294 調べもしない君には到底無理だ。作成を諦めろ。
304nobodyさん:04/06/12 12:08 ID:K+1+iYDq
調べてるよ。
locationで飛ばしたらいいだけ?
305nobodyさん:04/06/12 12:13 ID:???
>>301
嘘読まされるってどういう風になるの?
306nobodyさん:04/06/12 12:18 ID:???
嘘を掴まされるんだ
307nobodyさん:04/06/12 12:35 ID:???
>>294
スレ違い
308nobodyさん:04/06/12 12:46 ID:???
>>305
読んだ内容が、書かれているはずの物と異なる瞬間が存在して、その瞬間に読んだときに
ファイルが壊れているように見える。

再現性が非常に低いから解析できてないけど、どうしてもシステムのバグ以外には考えられない現象に遭遇したら、
そんなこと言ってた名無しがいた事を思い出せば、ちっとは得するかもな。
309nobodyさん:04/06/12 13:25 ID:???
>>308
書き換え前の内容と書き換え後の内容が混ざってるぐらいは
あってもしょうがないかなと思うけれども、どちらでもない
ゴミが読めるってことでしょうか? そうだとするとかなり嫌
な感じだな...
310nobodyさん:04/06/12 13:33 ID:FD8KxqwO
質問します

1.
ショッピングサイトを立ち上げているのですが、”決済する” のボタンを押すと、カード会社のサイトにジャンプし
、そのサイトで情報入力を行い、その戻りを受けてユーザに完了画面を出力しようと思います。

2.
こちらから、form post で、カード会社のCGIを呼び出し、カード情報入力画面をだします。
そのCGIは結果を success 又は ng でこちらに返してくるのですが、このままのつくりだと、
ユーザにカード情報入力後の画面に success , 又はngと ぽつんと表示され訳がわからない状態となります

3.
そこで、 form post属性で他のcgiを呼び出し、その結果を受けて、”xxxx円 決済が完了しました ありがとうございます
トップに戻る” と出したいのです。form post で呼び出したcgiの結果を判定する方法がわからないので、教えて下さい。
311nobodyさん:04/06/12 13:38 ID:???
>>297
倫理マークアップじゃなくて論理マークアップな
312nobodyさん:04/06/12 13:50 ID:???
>>310 少なくともスレ違い。ま,板違いだろうか。
313nobodyさん:04/06/12 14:09 ID:???
>>310
良かったら、どこのサイトか教えてくれないか?
2chで質問しながら作るような奴が作ったサイトでは絶対に買物したくないからな。
314nobodyさん:04/06/12 15:25 ID:???
カード会社ってCGIで決済してんの?
315nobodyさん:04/06/12 15:54 ID:???
>>313
おまえみたいなのよくいるけど、実は居酒屋とかでカード使うほうがよっぽど危ないよ。

316nobodyさん:04/06/12 16:01 ID:???
居酒屋でカード使う奴は居ないだろ。

そんな馬鹿な奴は挙手汁。
317nobodyさん:04/06/12 16:10 ID:???
Perlについての質問箱 10箱目
http://pc5.2ch.net/test/read.cgi/tech/1085564875/223

318nobodyさん:04/06/12 16:51 ID:???
>倫理マークアップじゃなくて論理マークアップな

ああ!!

いやマジで何なんだろうと悩んでたよ。<good>とか<evil>とかいうタグがあるのかと。
319nobodyさん:04/06/12 21:53 ID:???
<chinko>タグ
320nobodyさん:04/06/13 11:52 ID:???
>>316
居酒屋でも飲み屋でも使わないのおまい?
321nobodyさん:04/06/13 12:39 ID:???
例えにマジレス、しかも粘着
アイタタタ
322nobodyさん:04/06/13 12:41 ID:???
>>321
さらに亀レス
323nobodyさん:04/06/13 14:13 ID:???
流石に亀ではないでしょ
324313:04/06/13 15:17 ID:???
>>315
残念だな、俺はアルコールアレルギーで、居酒屋も飲み屋も行かない。
325nobodyさん:04/06/13 15:25 ID:???
かわいそうだな。
326nobodyさん:04/06/13 17:04 ID:???
1: Perlでパックマンを作りたい
2: それでラマ本を読んでみたが
3: 画面の作り方すら分からない

よろしこ。
327nobodyさん:04/06/13 18:14 ID:???
クライアントサイドで動かせる言語で作れよ
マジレスしてよかったのかな
328nobodyさん:04/06/13 18:33 ID:???
>>326
GUI でやりたいのなら Perl/Tk とか Win32::GUI とか WideStudio とか調べれ。
329nobodyさん:04/06/13 19:01 ID:???
オス。調べてくる。
コマンドプロンプトでとかは無理かい
330nobodyさん:04/06/13 19:37 ID:???
>>326
Advanced Perl Programmingに、Perl/Tkで作った
テトリスの作例があるから参考にしてみたら?
コードだけなら下のURLからダウンロードできるよ。

ttp://examples.oreilly.com/advperl/
331nobodyさん:04/06/14 08:30 ID:???
web製作板やWebProg板のスレタイを探したのですが
どこで質問すればいいのかわからなかったのでここで質問をします
スレ違いの場合は誘導お願いします

2chではread.cgiを使ってブラウザでも読めるようなcgiを作ってますが
cgiで引数を指定するのは?のはずなのにcgiの次が/で引数にはならないと思います
どうやったら?を入れなくても引数を指定することが出来るんでしょうか?
332nobodyさん:04/06/14 08:37 ID:???
>>331
おまえ馬鹿?引数とか意味もわからず使うなよ。お前の言いたいのはformのmethodだろ。
form method で調べて来い
333nobodyさん:04/06/14 08:43 ID:???
>>332
馬鹿?とか言ってるのにヒントをしっかりくれる優しい人がいてよかた。。。
なんか泣けてきた
ありがとう
334nobodyさん:04/06/14 08:53 ID:???
+from methodでぐぐっても解りませんでした
どちらか片方の用語だけでも調べようと思い
perl +fromやperl method 用語などでもぐぐりましたが全然でてきません。。。
もう少しヒントをください
335nobodyさん:04/06/14 09:45 ID:???
>>331>>334
>2chではread.cgiを使ってブラウザでも読めるようなcgiを作ってますが
>cgiで引数を指定するのは?のはずなのにcgiの次が/で引数にはならないと思います
>どうやったら?を入れなくても引数を指定することが出来るんでしょうか?
つまり Perl で CGI の 引数 について知りたいわけだろ?
自分で書いておいて何故わからんのか
336nobodyさん:04/06/14 10:09 ID:???
>>334
はいはい
PATH_INFOでぐぐりなさい
そしてもうここでは聞かないでください
337nobodyさん:04/06/14 10:42 ID:???
>>335
perlは全然知りません
Cを少しかじってるぐらいですが
ブラウザで?を入れると引数が入るのを以前確認しただけという知識です

>>336
ありがとうございます
>>331でも書きましたがスレ違いということならば
誘導先を教えてください
338nobodyさん:04/06/14 10:45 ID:???
理解できました
>>336さん
本当にありがとうございました
339nobodyさん:04/06/14 11:12 ID:???
やっと馬鹿が消えたか。それにしてもHTMLすら知らないとは・・・。
340nobodyさん:04/06/14 12:49 ID:???
341nobodyさん:04/06/14 18:38 ID:???
通販サイトをはじめて作ってるんだけど、注文はsendmailで流してもらって、その後
客に「この注文内容でいいですか?」みたいなメールを送りたいんだけど、毎回手打ちは面倒だから
perlでテンプレでも作って、注文内容や送り先とかを自動で埋め込むみたいなのを作りたい。

でも具体的にどういう設計にすればいいか思いつかない・・・

とりあえず注文メールにここから客へのメールが贈れます、みたいなURLを渡して
そこにアクセスするとその時の注文内容とかが書かれたメールの本文が既にできあがって
いて、ワンタッチで送信。

みたいなのがいいと思うんだけど、やっぱ注文受けたときに新規のファイルでも作って、その
URLをメールで渡すくらいしかないかな?なんかイケてないんだよね。
342nobodyさん:04/06/14 19:00 ID:???
ここはコーディングのスレです。
343nobodyさん:04/06/14 20:05 ID:???
↓次の人どうぞ〜
344341:04/06/14 20:13 ID:???
>>342>>343
探したけど、他に>>341のような質問するとこなかったよ。やっぱ駄目かな・・・
345nobodyさん:04/06/14 20:27 ID:???
スレ違いだって言ってんのに駄々捏ねるな。
駄々捏ねたかったら自分のサイトで捏ねてろ。

http://e-words.jp/
この辺をお勧めする。
346未承諾広告※ ◆TWARamEjuA :04/06/14 20:31 ID:???
>>344
流れ的には問題ありありかもしれないけれど一つの方法として、
自分宛に送られてくる発注メール自体を「この注文内容でよろしいですか?」にして、
うけとったらそのまま発注者へ流せば手打ちの手間が減るですね(w
347nobodyさん:04/06/14 20:35 ID:???
die "テスト:エラー";

とやってもエラー画面の表示が変わらないんだけど何がおかしいの?

環境はwin98/ie6/httpd142k/activeperl5.6/
348nobodyさん:04/06/14 20:38 ID:???
activeperlとやらのマニュアル嫁。結構良く出来てるぞ。
349341:04/06/14 20:42 ID:???
>>346
おお!レスありがと!

「この注文内容でよろしいですか?」のメールを実際に贈るのは
コンピュータ全く知らない素人だからインターフェースをある程度のものにしなきゃ
と思ってる。

>>346のやり方で思ったけど、普通に注文を知らせるメール本文の下の方、というかある程度
感覚を空けて、客に出すメールの本文をくっつけておけば、後はそれをコピペ。みたいでもいいかも。

ただ、実際にやる人間がコピペができるかどうか・・・・;
350347:04/06/14 20:44 ID:???
>>348
じゃあここは何の為にあるの?・・・・・・って浮かんできたけど、読んでみる。ありがと。
351nobodyさん:04/06/14 20:48 ID:???
質問するのはマニュアル読んだ後な、それでも分からなかったらって事。
352nobodyさん:04/06/14 21:03 ID:???
>>346
お前は運用の板でネチョネチョやってろよ。
色んな板で糞コテの売名したいか?
353nobodyさん:04/06/14 21:04 ID:???
>>349
だからスレ違いだって言われてるだろ。
ウザイからもう来るな。
354nobodyさん:04/06/14 21:13 ID:???
UIのスレはここではない!
355nobodyさん:04/06/14 21:18 ID:???
>>346
コテはうんざりだから必要もないのにいちいち名乗るな。
それこそ売名ならやめられんのかもしれんが。
本7とカポコンの悪臭だけでゲロゲロだから。
356 :04/06/15 13:21 ID:???
WWW:Mechanizeを使おうとすると
Can't locate object method "requests_redirectable" via package "WWW::Mechanize"
(perhaps you forgot to load "WWW::Mechanize"?) at C:/Perl/site/lib/WWW/Mechanize
.pm line 156.
というエラーが出されるのですが、ソースでは
use WWW::Mechanize;
と宣言しています。原因はなんでしょうか?
357nobodyさん:04/06/15 14:41 ID:???
>>356
だからここはコーディング質問スレだっていってんだろ!!!!!!
モジュールの使い方は専用のスレに行け!!!!!!!!!!!
358nobodyさん:04/06/15 15:08 ID:???
if($res =~ m/!!!!!/) $flag = "厨房";
359nobodyさん:04/06/15 15:12 ID:???
>>358=356
スレ違いな奴はくるな
360nobodyさん:04/06/15 16:21 ID:dQxW4G/W
以下のような、1行に1件分の情報が記述されているタブ区切りテキストがあります。
このデータをブラウザから編集させたいと思うのですが、なにか参考になるモジュールなどは
ありませんでしょうか?
Perl5以上で動作するものがいいです。

-----
# 会員番号 名前 電話番号
0001山田 太郎090-1234-5678
0002山田 次郎090-1111-2222
-----
361nobodyさん:04/06/15 16:27 ID:???
CGIとして使うならモジュールも糞もあるか?
362nobodyさん:04/06/15 16:53 ID:???
ログを読み込んで<INPUT type="text">内に吐かせればいいんじゃないか?
もしかして俺は釣らr(
363nobodyさん:04/06/15 17:01 ID:???
質問いいでしょうか。
メールアドレスを入力するフォーム部で、[0-9A-Za-z]と[@.-]以外の文字列が含まれていた場合、エラーを返す処理を行いたいと思います。
使用可能な文字列を配列@availableに入れるとして、$mailに配列@available内の文字以外のものがあれば○○する、という記述をしたいのです。

foreach (0 .. $#available) {
 if (index ($mail, $available[$_]) >= 0) {

こう書くと、@available内の文字があった場合に処理を行うということになりますが、
@available内の文字以外のものがあれば、という判定はどのように書けばいいのでしょうか。
364nobodyさん:04/06/15 17:12 ID:???
>>363
> メールアドレスを入力するフォーム部で、[0-9A-Za-z]と[@.-]以外の
> 文字列が含まれていた場合、エラーを返す処理を行いたいと思います。

$mail =~ /[^\-.0-9\@A-Za-z]/ and error();
365nobodyさん:04/06/15 17:16 ID:???
言われて見れば全くその通りで・・・
>>364氏感謝。何で正規表現の否定が思いつかなかったんだ orz
366360:04/06/15 18:24 ID:dQxW4G/W
>361
>CGIとして使うならモジュールも糞もあるか?

すいません、意味が分かりません。
367nobodyさん:04/06/15 18:27 ID:???
意味が分かるようになるまで最低限御勉強しようね。
言葉が通じないのでは御話にならない。
368nobodyさん:04/06/15 18:41 ID:???
>>366
お前がモジュールなんていう言葉を使うのは10年早い。
↓ここでCGIを探せ

【CGI】こんなCGI探してますver.13
http://pc5.2ch.net/test/read.cgi/hp/1081608108/
369nobodyさん:04/06/15 22:50 ID:???
数行にわたって
ID:passという書式でかかれているdatファイルから
特定のIDとパスワードを検索してその文字列だけを書き換えたいのですがどうすればいいでしょうか?
教えて下さい。お願いします。
370nobodyさん:04/06/15 22:58 ID:???
やることわかってるじゃん
open でファイル開くことから教えてくんかい?
371369:04/06/15 23:25 ID:???
ファイル読み書きはできます。
特定のIDとパスワードを検索してその文字列だけを書き換えたい
という処理の仕方をどうすればいいかわからないんです。よろしくお願いします。
372nobodyさん:04/06/15 23:28 ID:???
>>371
読み込んで書き換えて上書きしろよ
373nobodyさん:04/06/15 23:32 ID:???
>>371
ifを使え
374nobodyさん:04/06/16 00:15 ID:???
ちょっとは自分で考えないのかね。
375sage:04/06/16 01:00 ID:???
頭が無いんです
376nobodyさん:04/06/16 01:06 ID:???
> 特定のIDとパスワードを検索してその文字列だけを書き換えたい
正規表現を15分でいいから勉強するよろし。
377nobodyさん:04/06/16 04:13 ID:???
378369:04/06/16 17:05 ID:???
>>377
ありがとうございます。
379nobodyさん:04/06/17 12:14 ID:???
質問いいでしょうか。
BBSでの投稿フォームの記入内容にNGワードが存在する場合にエラーを返す処理をしたいのです。
フォームはname,mail,textの3つのフィールドがあります。

@ng_word = ("逝ってよし");
# テキスト内を検索して、NGワードが存在した場合
foreach (0 .. $#ng_word) {
 if (index ($name, $ng_word[$_]) >= 0 || index ($mail, $ng_word[$_]) >= 0 || index ($text, $ng_word[$_]) >= 0) { 以下略

上記の4行目の判定部分なのですが、フィールドが増えるたびに
index ($mail, $ng_word[$_]) >= 0 ||
のような書き方を追加して書かなければならないのでしょうか。
$nameや$mailなどをあらかじめ配列に追加しておいて、配列内のそれらの変数を判定させると言う書き方はできませんか?
380nobodyさん:04/06/17 12:38 ID:???
>>379
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlsyn.html#Foreach_Loops

my @ng_word = qw( ... );
foreach my $word (@ng_word) {
  foreach ($name, $mail, $text) {
    index($_, $word) > -1 && error();
  }
}
381nobodyさん:04/06/17 14:12 ID:???
>>379です。
解決しました。レスありがとうございます。
382nobodyさん:04/06/18 08:52 ID:???
すみません。正規表現について教えてください
文字列内に以下の条件を含む部分があるかどうかを
チェックするために正規表現を使ってみたいのですが
いかようにすればよいでしょうか?
?nnnn (nnnnは4桁の数字)
383nobodyさん:04/06/18 10:05 ID:???
スレタイ嫁
でも俺すげー優しいからヒントをやろう。

0-9

あとは自分で考え。
スレタイ嫁
384nobodyさん:04/06/18 10:20 ID:???
>>383
すげー優
しい


>>382
スレタイ嫁
385nobodyさん:04/06/18 10:48 ID:???
できました。
"?[0-9]{4}"
386nobodyさん:04/06/18 10:49 ID:???
スレタイ嫁ってなんですか?
387nobodyさん:04/06/18 10:49 ID:???
それじゃダメだと思うが
どうダメかは正規表現道場スレで聞け
388nobodyさん:04/06/18 11:14 ID:???
>>387
マジですか?
お願いします。教えてください。なにとぞなにとぞ
389nobodyさん:04/06/18 14:05 ID:???
>どうダメかは正規表現道場スレで聞け
390nobodyさん:04/06/18 14:25 ID:???
さてはわからないんですね?
391nobodyさん:04/06/18 14:58 ID:???
まあ煽っても何も出ないんで該当スレに行くか諦めて下さい。
392nobodyさん:04/06/18 16:08 ID:???
ワロタ
お前等面白い
393nobodyさん:04/06/18 20:06 ID:???
perlと言うかjavaスクリプトも絡んでくるかと思いますが
フォームからPOSTで送信してcgiから帰って来る結果を小さいウインドウを別にポップアップして
そこに表示したいのですが、どうすればいいでしょうか?
教えて下さい。お願い致します。
394nobodyさん:04/06/18 21:11 ID:???
395nobodyさん:04/06/18 22:13 ID:???
>>393
perlは全く関係ないじゃん
396nobodyさん:04/06/19 04:43 ID:Bryn3NL2
質問です

ブラウザからあるperlのプログラムを起動して、データベースの更新をしているのですが、
これをバッチとして自動起動したいと思っています。
で、 perl xxxx.cgi  とすると、エラーになります。
どこでエラーになるかを調べたところ require xxxxx.cgi でrequireが正しくされていないようです。
perl はバッチ処理としては動かないのでしょうか?
397nobodyさん:04/06/19 07:02 ID:???
requireをドライブ名からの絶対パスで指定すればいいんでないの?
398nobodyさん:04/06/19 07:28 ID:Bryn3NL2
>>397
レスサンクスですが
絶対パスでもだめでした
399nobodyさん:04/06/19 09:50 ID:???
1.プロ野球の順位を「変動勝ち点制」(と私が名づけたシステム)で
順位付けをしたいです。「変動勝ち点制」とは、1位のチームは6点、
2位のチームは5点、という具合に各チームがランキングポイントを
持っています。試合の勝者が相手チームのランキングポイントを獲得し、
トータルポイントに加算していきます。その日の順位によってランキング
ポイントは変化します。

2.以下にソースを貼り付けます。データを保存しているresult.datは
1行がこんな風になっています。「d,l,w:k,n,w:l,o,q」。":"で区切った
一番目の要素が勝者で、2番目が敗者です。3番目に"w"となって
いるのは試合が決着した場合、"q"は引き分けです。

3.エラーは出ないのですが、何も答えてはくれません。CPUが100%になって
いるので何かやってはいるみたいなのですが……。
400399:04/06/19 09:50 ID:???
#$?[0]はチームの頭文字。$?[1]はトータルポイント。
#$?[2]は昨年の順位=ランキングポイント。
@d=("H","0","6");@s=("L","0","5");@k=("Bu","0","4");
@n=("F","0","3");@l=("M","0","2");@o=("Bw","0","1");
#result.datからその日の試合結果を入力する
open (RESULT,"result.dat");
while ($result = <RESULT>){
 chop($result);
 while($x = split (/:/,$result)){
  while(@y = split(/,/,$x)){
   if($y[2] eq "w"){
    $$y[0][1]=$$y[0][1]+$$y[1][2];
   }else{
    $$y[0][1]=$$y[0][1]+($$y[1][2] / 2);
    $$y[1][1]=$$y[1][1]+($$y[0][2] / 2);
   }
  }
  #その日のランキングポイントを決める
  #鷹
  $rp=6;
  if($d[1]<$s[1]){$rp=$rp-1;}elsif($d[1]<$k[1]){$rp=$rp-1;}
  elsif($d[1]<$n[1]){$rp=$rp-1;}elsif($d[1]<$l[1]){$rp=$rp-1;}
  elsif($d[1]<$o[1]){$rp=$rp-1;}
  $d[2]=$rp;
  #あとは同じなので省略。猫、牛……と去年の順位にしたがって続きます
 }}
 close (RESULT);
#結果を出力
 print ("H\t$d[1]\n");print ("L\t$s[1]\n");print ("Bu\t$k[1]\n");
 print ("F\t$n[1]\n");print ("M\t$l[1]\n");print ("BW\t$0[1]\n")
401nobodyさん:04/06/19 10:17 ID:???
>>396
perl -IC:/WINNT/system32 foo.cgi
-Iオプションでrequireするディレクトリを追加してみるとか

>>400
whileって何するのか勉強してこい
402nobodyさん:04/06/19 13:31 ID:???
わいろ
403nobodyさん:04/06/19 14:47 ID:Bryn3NL2
>>401
サンクスコ やってみます
404nobodyさん :04/06/19 21:48 ID:???
配列に格納されたハッシュの、特定のキーの値で配列をソートすることは出来るのでしょうか?
@array(
{'a'=>'value1','b'=>'1234'},
{'a'=>'value2','b'=>'4518'},
{'a'=>'value6','b'=>'4879'},
);
とあったとして、bの値でarrayをソートしたいのですが。
405nobodyさん:04/06/19 22:10 ID:???
406nobodyさん:04/06/20 06:51 ID:F4x9/MNB
どなたか教えてください
元々 Perl(CGI) で動いてたものを PHP へ移植したんですが、クライアントからの呼び出しが
a.cgi 固定で PHP を cgi として動かせないサーバで困っています
そこで a.cgi(Perl) は a.php を呼び出すだけの機能にしたいのですが Perl(CGI) から PHP は
どのように呼び出せばいいのでしょうか?
よろしくお願いします
407nobodyさん:04/06/20 12:09 ID:???
>>406
<Files a.cgi>
 AddType application/x-httpd-php .cgi
</Files>

(w
408nobodyさん:04/06/20 14:13 ID:???
ログファイルを保存するのに
open(IN,"$logfile") || &error("ファイルがオープン出来ませんでした。");
@nakami=<IN>;
close(IN);
$log = "$title<>$time<>message\n";
unshift(@nakami,"$log");
open(OUT,">$logfile") || &error("ファイルに書き込み出来ませんでした。");
print (OUT "@nakami");
close(OUT);

と書いたのですがログファイルの先頭にスペースがついていってしまいます。
$title<>$time<>message
 $title<>$time<>message
  $title<>$time<>message
とこういう風に上書きしていくとどんどん増えていってしまいます。
どこがわるいのでしょうか?教えて下さい。お願いします。
409nobodyさん:04/06/20 14:38 ID:???
つい最近も見たような質問だな。

ところで @nakami=<IN>; って、
昔俺が赤ラクダ本を読んだときには「そんなことするな」と書いてあったような記憶が
あるんだが、最近はみんなやってることなの?
ファイルを全部いっぺんに読み込むからメモリが膨れ上がって、
共用サーバだと結構世の中の迷惑なんじゃないかという気がするんだが。
一行毎に処理していたフィルタ全盛時代の美徳はもはや失われてしまったのか。
410408:04/06/20 14:44 ID:???
>>409
私は自宅鯖なのでその処理はメモリ使うって書いていましたが気にせず使っています。
411406:04/06/20 15:10 ID:???
>>407
ありがとうございます
これって apache の設定ですか?
であればレンタル鯖なのでいじれないんです
他になにかいいアイディアはないでしょうか
よろしくお願いします
412nobodyさん:04/06/20 15:42 ID:???
open(IN,"$logfile") || &error("ファイルがオープン出来ませんでした。");
@nakami=<IN>;
close(IN);
$log = "$title<>$time<>message";
unshift(@nakami,"$log");
open(OUT,">$logfile") || &error("ファイルに書き込み出来ませんでした。");
$" = "\n";
print (OUT "@nakami");
close(OUT);
413406:04/06/20 16:18 ID:???
>>412
うまくいきました。
ありがとうございます。
414406:04/06/20 16:19 ID:???
と思ったらうまくいきませんでした・・・
415nobodyさん:04/06/20 16:36 ID:???
>>404
my @new = sort{ $a->{b} <=> $b->{b} } @array;

>>406
print (OUT @nakami);
416nobodyさん:04/06/20 16:41 ID:???
追記
>>406
>>125-127
417nobodyさん:04/06/20 20:47 ID:???
>>415
シュウォーツ変換をお勉強しようね。
418 ◆u2YjtUz8MU :04/06/20 22:17 ID:???
@list = (name<>pass<>3, name<>pass<>7, name<>pass<>5);
このような配列があるときに、配列の一部に存在する
3, 7, 5の数字を使ってソートしたいです。
こう並べ替えたい↓
@list = (name<>pass<>7, name<>pass<>5, name<>pass<>3);
のですが、うまく処理する方法が思いつきません。
よろしくお願いします。
419nobodyさん:04/06/20 22:34 ID:???
>>418
@list =(
"name3<>pass3<>3",
"name7<>pass7<>7",
"name5<>pass5<>5");
@array = sort{(split(/<>/,$b))[2] <=> (split(/<>/,$a))[2]}@list;

こんな感じか?
もうちょい綺麗な書き方ありそうだが…
420nobodyさん:04/06/20 22:35 ID:???
>>417
このケースで効率的なシューウォーツ変換ってなによ?

シューウォーツ変換が効率的なのは>>418のようなケースだろう。
>>418
@list = map{ $_->[1] } sort { $a->[0] <=> $b->[0] } map{ [(split /<>/)[1], $_] } (...list...);
421420:04/06/20 22:39 ID:???
おっと、微妙にソートの前処理が間違ってたな。
適当に脳内補完してくれ。
422 ◆u2YjtUz8MU :04/06/20 22:42 ID:???
>>419
理解できてないですが、
テストした結果うまく動いてるようです。
ありがとうございました。
423415:04/06/20 23:45 ID:???
>>417
私にはさっぱり想像がつかないので、
>>404のケースでの使い方を教えてください。

>>418
数値が一桁固定なら、こんなのも。

my @new = map{ substr($_, 1) }
sort map { pack('A1A*', (split(/<>/))[2], $_) } @list;
424406:04/06/21 04:08 ID:???
うぅ
Perl から PHP を呼ぶ方法は無いのでしょうか
クライアント側の変更をお願いするしかないのかな...お金が飛んで行く〜
425nobodyさん:04/06/21 05:38 ID:???
配列hogeにテキストがいくつか入っていて、
それを以下のような形で全て表示させたい場合、
合理的というか、無駄のない書き方が思い浮かば困ってます。
┌テキスト1
├テキスト2
├テキスト3
└テキスト4

今↓のように書いているのですが、おそらく効率がわるいような気がします。
foreach (0 .. $#hoge) {
my $prefix;
if ($_ == 0) {
$prefix = '┌';
} elsif ($_ == $#hoge) {
$prefix = '└';
} else {
$prefix = '├';
}
print "$prefix$hoge[$_]<br>\n";
}

こういうのを書くことって結構あると思うんですが、
ご教示いただけませんでしょうか。
426nobodyさん:04/06/21 07:29 ID:pRQNX02o
$a='124'; $a=~tr/0-9/0-9/; print $a
これは「124」となる筈ですよね?
何故か「020305」となります。
もしかしてバグでしょうか?

環境は XP + ActivePerl 5.8.3 です。
427nobodyさん:04/06/21 07:52 ID:???
>>426
あれだよ。あれ。全角使うならもう少し考慮すべきことがある。
428nobodyさん:04/06/21 08:06 ID:???
すいません jcode.pl使います
429nobodyさん:04/06/21 14:53 ID:???
>>425
foreach (0 .. $#hoge) {
printf qq|%s%s<br>\n|, $_ ? $_ == $#hoge ? '└' : '├' : '┌', $hoge[$_];
}
ややブサイコ

>>428
おーい 5.8 だろ?(w
430nobodyさん:04/06/21 23:07 ID:???
die if $#hoge < 1;

print "┌$hoge[ 0 ]\n";
for(1..($#hoge-1)){ print "├$hoge[ $_ ]\n" }
print "└$hoge[$#hoge]\n";
431nobodyさん:04/06/21 23:21 ID:???
die if $#hoge < 1;

$first = shift @hoge;#効率悪いかも
$last = pop @hoge;

print "┌$first\n";
print "├$_\n" for(@hoge);
print "└$last\n";

432nobodyさん:04/06/21 23:30 ID:???
どいつもこいつも die だの 死ぬだの、、、もっと命を大事にしてくれよ!
433nobodyさん:04/06/21 23:47 ID:???
かと言って本7みたいに逃げてばかりなのもイカガ谷^hなものかと。
434nobodyさん:04/06/22 11:03 ID:???
>>426
jcodeを使っても、sjisの場合とかは第二引数に範囲指定が効かない場合がある。
&jcode::tr (\$value, "0123456789", "0-9");
435nobodyさん:04/06/22 12:14 ID:???
>>434
ていうか、jcode.plに範囲指定はJISとEUCでしか使えないって書いてあるよ。

;# Range operator like `A-Z' for 2 byte code is partially
;# supported. Code must be JIS or EUC, and first byte
;# have to be same on first and last character.
436nobodyさん:04/06/22 14:14 ID:???
PerlでForm動かすのが激しく苦手なので得意な方教えてください。

FormでボタンAとボタンBを作って、web上でボタンA、Bを押すとそれぞれ
$Xの数値を変える(たとえばボタンAを押したら$x = 1、Bを押したら$x = 2)
というのを作りたいんですが、どうすればいいでしょうか。
教えてください。お願いします。
437nobodyさん:04/06/22 15:07 ID:???
↑とりあえず黙ってくれる?そしてスレタイ嫁
438nobodyさん:04/06/22 15:16 ID:???
きっと説明も激しく苦手なんだろうよ
439nobodyさん:04/06/22 18:00 ID:???
<form method="POST" action="hoge.cgi>
<input type="radio" name="x" value=1>Aボタン
<input type="radio" name="x" value=2>Bボタン
</form>
−−−hoge.cgi
#! /path/to/perl
use CGI;
$cgi = CGI->new();
$x = $cgi->param('x');
print $cgi->header();
print $cgi->start_html();
print $x;
print $cgi->end_html();
440nobodyさん:04/06/22 19:37 ID:???
PERLでフォームからのデータをSTDINから受け取ってそれを使って色々処理をする場合
受け取った一番初めに中身に変な文字列が入っていないかを検査したほうがいいのですか?

変な文字列というのはPERLの命令文とかです。受けたデータをそのまま使うの大丈夫なのかなと
疑問に思ったので質問しました。どなたかお願いします。

441nobodyさん:04/06/22 19:45 ID:???
>>440
渡すのもあなた、受け取るのもあなた。
変なものを渡さないようにするのもあなたでしょ?

誰か知らない人から受け取るんなら、どんなもの渡したのかその人に聞くか、
中身みて期待値かどうか自分で見て下さい。

どなたか知りませんがお願いします。
442440:04/06/22 20:24 ID:???
>>441
質問の仕方がわるかったのでしょうか?
read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'});
print $buffer;
とかした場合にJSとかHTMLのタグじゃなくperlの関数とか命令文が入っていた場合に
その命令文が実行されてしまうのですか?という質問です。

お願いします。
443nobodyさん:04/06/22 20:36 ID:???
されるわけがない。
444nobodyさん:04/06/22 20:50 ID:???
>>442
やってみろよ。

# 442
レン鯖なので怖くて出来ません。

>>442
森へお帰り
445440:04/06/22 22:27 ID:???
>>443
ですよね。簡潔で最高な答えありがとうございました。
>>444
鯖はまだなのでhttpdとactiveperlでやってます。どっちにしろレンサバでperlのテストなんか
馬鹿なことしませんけどね。

ところで何故にperlの命令文は無効になるんですか?evalしたら実行されますよね?

#自治厨
スレ違い

>>自治厨
森へお帰り

#444
やってみろよ

>>444
お前の話はつまらん
446nobodyさん:04/06/22 22:41 ID:???
またh(ry
447nobodyさん:04/06/22 23:40 ID:???
バカが(ry
448nobodyさん:04/06/22 23:44 ID:???
>>440は馬鹿なのかお調子者なのか。
どっちにしてももう答えてくれる人はいないだろうけど。
449nobodyさん:04/06/22 23:56 ID:???
今さらjcode.plもないだろ。奥付見て、3年以上前のPerlCGI入門書は買わないよーに。
450nobodyさん:04/06/23 00:09 ID:???
perlスクリプトで、標準入力へ入力させる方法がわかりません。

具体的には、passwdコマンドをperlから実行し、2回促される
入力をプログラムから自動的に入力させたいといったもの
です。

もしも何か方法があれば教えていただきたい次第です。
宜しくお願い致します。
451nobodyさん:04/06/23 00:11 ID:???
perlじゃなくて、expectを使おう。
452440:04/06/23 01:16 ID:???
わかんないですか?
453nobodyさん:04/06/23 01:19 ID:???
↑古典的且つ模範的な教えて君登場↑
454nobodyさん:04/06/23 01:20 ID:???
>>450
Net::Telnet
455nobodyさん:04/06/23 02:03 ID:???
スクリプトを書きながら気になったのですが、
各サブルーチンをスクリプト内に全部記述するのと、
それぞれにライブラリファイルを作成して必要なときのみrequireで読み込むのとどっちがいいんでしょうかね?
いまいち意味不明っぽいですが、つまりは

if ($bar) {
 require "hogehoge.pl";
 &hogehoge::foo(\$bar);
}



if ($bar) { &foo(\$bar); }

のどっちがいいのでしょうか?

456nobodyさん:04/06/23 02:07 ID:???
時と場合によるよ。たくさんプログラムを書いてる内にうまく使い分けができるようになる。
457nobodyさん:04/06/23 02:26 ID:???
>456
レスありがとうございます。
使い分け、頭の片隅に置いておきます。
まだまだ常時考えながらはコード書けませんです、はい。

もう少し色んなこと考えながらコード書かないとだめだなぁ…
458nobodyさん:04/06/23 03:04 ID:???
>>440>>452
445のレスを見たら誰も答えなくなるよ。
常識の無い奴はスルーされる。
459nobodyさん:04/06/23 05:27 ID:???
460nobodyさん:04/06/23 10:31 ID:???
1<>い<>12:50<>
4<>あ<>20:02<>
2<>き<>08:41<>

このように並んでいるテキストを、入力された数値によってソートしたいのですが
今は
if($num==1){ };
if($num==2){ };
if($num==3){ };
みたいに書いてるのですが、もっとスマートなやり方は無いでしょうか?
461nobodyさん:04/06/23 11:41 ID:???
やかましいわいヴォケ
ちゃんと説明しろ
462nobodyさん:04/06/23 11:44 ID:???
$data{$num} = $line;
見たいにハッシュにぶち込んで、

foreach my $num (sort( keys %data)){
#$data{$num} の処理
}

にする
463440:04/06/23 12:42 ID:???
>>458
わかんないんですか?
464nobodyさん:04/06/23 18:02 ID:???
うん。わかんないよ。
さあ帰った帰った。
465nobodyさん:04/06/23 18:08 ID:???
>>463
すんげー難しいからわかるやつはどこにもいないよ。
じゃあバイバイ。
466nobodyさん:04/06/23 21:04 ID:???
cookieを読みこんで配列にしたいんだけど、
$a = $ENV{'HTTP_COOKIE'};
@a = split /\;/,$a;
foreach(@a){
(my $a , my $b) = split /=/;
$form{$a} = $b ;
}
クッキーの中にNAME=VALUEが一つだけでも複数あっても大丈夫のようにしたいんだけど、↑ので
合ってる?一つの場合は@aの中には$aがそのまま入るから一応大丈夫だと思うけど、
ここのお墨付きをもらいにきた。
467nobodyさん:04/06/23 21:16 ID:???
>>466
チェックぐらい自分でしろ。
http://www.studyinghttp.net/cookies.html
468466:04/06/23 21:37 ID:???
>>467
わかんないなら、答えずともよい。
469nobodyさん:04/06/23 21:39 ID:???
うん。わかんないよ。
さあ帰った帰った。
470nobodyさん:04/06/23 21:40 ID:???
>>468
すんげー難しいからわかるやつはどこにもいないよ。
じゃあバイバイ。
471466:04/06/23 21:41 ID:???
>>469-470
ここには回答者は一人しかいないのか?
とりあえず一人二役とか恥ずかしいから止めとけって。
472440:04/06/23 21:44 ID:???
なんかキモイですねここ。

>さあ帰った帰った。

ってまるで、ここがあなたの居場所みたいな言い方ですけど、
ここがあなたの居場所なんですか?
473nobodyさん:04/06/23 21:44 ID:???
(´-`).。oO(恥ずかしい質問をしてる奴がよく言うよ・・・)
474nobodyさん:04/06/23 21:46 ID:???
>>471-472
一人二役とか恥ずかしいから止めとけって。
475466:04/06/23 21:46 ID:???
誰かまともな人いたら>>466お願いね。
まともな人のお墨付きが欲しいんだ。
476nobodyさん:04/06/23 21:46 ID:???
>>472
まあ、お前の居ていい場所ではないな。
477nobodyさん:04/06/23 21:47 ID:???
ここは香ばしいインターネッツですね
478440:04/06/23 21:48 ID:???
>>473
私に言ってるのですか?
ところでこのスレがあなたの居場所なんですか?
479nobodyさん:04/06/23 21:49 ID:???
>>475
オッケーオッケー完璧です
480nobodyさん:04/06/23 21:50 ID:???
お前ら幼稚な争いはやめれ。
ここは質問スレなんだから、喧嘩はよそでやってくれ。
481nobodyさん:04/06/23 21:52 ID:???
>>480
お前らって言うより440=466
482466:04/06/23 21:54 ID:???
>>479
おまいは>>469-470だろ?でもまあ俺は単純だから、俺より詳しそうなおまいに
okを出してもらえば、それで安心だよ。ありがとね。

>>467でくれたサイトもいいとこみたいだから見に行くよ。それじゃ。ごめんね。
483480:04/06/23 21:56 ID:???
>>481
俺にはここに俺ともう二人しかいないようにしか思えないんだが・・・・
そして俺以外の二人に向けて言ったんだけど、まあとりあえず早く正常に戻そうよ。

それでは次の質問どぞ↓
484440:04/06/23 21:57 ID:???
ところでこのスレがあなたの居場所なんですか?

いつになったら答えてくれるんですか?恥ずかしくて答えられませんか?
485nobodyさん:04/06/23 22:10 ID:???
----- 終了 -----
486nobodyさん:04/06/23 22:20 ID:???
487nobodyさん:04/06/23 22:22 ID:???
一連の流れを読んでみて思った。
質問者も悪いが、すぐムキになる回答者もどうかと。
っていうかこのスレの回答者は特有だね。
母親に向かってすぐ「くそババァ!」って連呼するタイプの人間だな。内弁慶っていうかな。
488nobodyさん:04/06/23 22:27 ID:???
>>487
>>1
良い回答は良い質問から。
^^^^^^^^^^^^^^^^^^^^^^
489nobodyさん:04/06/23 22:38 ID:???
>>488
そうやっていつでも相手のせいにする辺りもどうかと。どちらかが大人になるしかないでしょ。
490nobodyさん:04/06/23 22:53 ID:???
ロクでもない質問はいっさいレスをせずに無視しとくか
491nobodyさん:04/06/23 23:08 ID:???
>>486
俺がくらったじゃねえかよ!マジで鬱・・・・何のウイルス?
色々探したが見つからなかった・・・・ウイルス対策なしの俺がここのURLを見に行くなんて
しくじった。
perl_tipsっていかにも正当な名前なのに。マジで直し方教えてくれ。
492nobodyさん:04/06/23 23:33 ID:???
493nobodyさん:04/06/24 00:03 ID:???
>>491
どんくせえやつだな、ったく
494491:04/06/24 00:04 ID:???
>>492
ありがとう・・・・スキャンかけたいけど、っていうか対策ソフトいれたいけど、c:\が残り
50MBしかないから・・・・

とりあえず、ブラクラ系みたいなのでほっとしてる。変な症状もないし、スタートアップにも
新しい奴なかったからほっとく。

それにしても何故にこのスレでトロイの木馬が貼られてるんだよ・・・・・そんなに憎悪を抱いたのか?
495491:04/06/24 00:05 ID:???
>>493
そんなこと言うなよ・・・・・既に鬱なんだから、追い撃ちかけるのは止めて・・・・
496nobodyさん:04/06/24 01:29 ID:???
>491
ソース見てみたが、ウィルスではないと思うぞ。
<meta http-equiv="Refresh" content="0">と、
コンコンクラッシャーとメールストーム。
ただし、
<img src="http:// www. raus. de/ crashme/">
の部分が完全一致でをウィルスとして認定するらしい。 
(全角スペースを空けて反応しないようにしてある)
497491:04/06/24 02:23 ID:???
>>496
ありがと。その優しさに軽く感動;;
俺実は2回踏んだのね。一度目はセキュリティ中のままで行ったらいきなり画面が真っ青になって
例外なんとかってやつが出て再起動して、レジストリ修復してセーフであげてscandiskとかした後、
普通に立ち上げたらとくには問題ないみたいだった。

2回目はそのソースをブラクラチェッカにかけてみたけど、そのチェッカの使い方がわからずに、セキュリティを
最高に挙げて愚直にトライ。結果同じ症状で再起動した後、同じ事やって今の状況・・・・・・

俺の場合ウイルスのとこに行く前に、例外発生画面になった気がする。クリック1秒未満で画面が何も変化
ないまま次の画面は青い例外発生画面だったから。

ほんと優しくしてくれてありがと。癒されたぽ
498491:04/06/24 03:13 ID:???
http://www.trendmicro.co.jp/vinfo/virusencyclo/default5.asp?VName=HTML_SUAR.A

これだったみたい。一応オンラインのウイルススキャンかけてみたら
このウイルスがテンポラリファイルから4つ検出された。とりあえず危険なものではなくて「ほっ」・・・・
499nobodyさん:04/06/24 10:36 ID:???
おまいらスレ違いすぎ。

- - - - - Perl コーディング初心者質問コーナー Part35 - - - - -
500nobodyさん:04/06/24 18:54 ID:???
ブラウザの「進む」とか「戻る」でcgiのページに移動すると、
警告:ページの有効期限切れ
というメッセージが出るのですが、それが出ないサイトもあるみたいですが、
それはどういう方法を使ってるのですか?PERLでのやりかたが知りたいので教えて下さい。
501nobodyさん:04/06/24 18:59 ID:???
htmlのノーキャッシュじゃねーの?
502nobodyさん:04/06/24 19:10 ID:???
厳密にはhtmlとは限らない罠
503nobodyさん:04/06/24 20:00 ID:???
>>500
formのmethodをgetにする。
504500:04/06/24 20:31 ID:???
>>501
キャッシュの制御を<meta>で変えればいいのですか?

>>502
HTTPのヘッダーの辺りということでしょうか?

>>503
getだとできるんですね!getの時はブラウザの戻る、進むでクエリ付きURLだから
そのまま処理をしてくれるということみたいですね。
postの場合は標準入力から読みこむ。それで、postで送ったフォームデータは
セキュリティ上の都合でブラウザ?のデフォルト設定が自動再送信しないようになって
いるんですよね?HTTPのヘッダに何かを追加すると、その設定が変えられるというわけでしょうか?

505nobodyさん:04/06/24 20:37 ID:???
Expires:
506nobodyさん:04/06/24 20:38 ID:???
俺も昔気になったときにメソッドによるのかな?と思ったが、
結局違うくて、ノーキャッシュだったと思うんだがなぁ

兎に角何でもかんでも1から10まで全部他人に頼ろうと思わず、
与えられた情報を自分で試す努力しろっての
507nobodyさん:04/06/24 20:41 ID:???
それ以前にスレ違い
508nobodyさん:04/06/24 21:30 ID:???
>>504
一応header関連だった気がするが、cgiの出力をキャッシュさせるかどうかは
pragma
expires
cache-control
他にもなんかあった気がするけど、HTTPサーバによっては-nphで自分で一からheader
を設定しないと、勝手にno-cacheを吐き出すよ。たしかね。

どうだったっけかな。思い出せない。
509500:04/06/24 21:56 ID:???
ありがとうございます!今ローカル環境で試してますがなかなかできません。

print "Content-type:text/html\n";
print "Expires:Sun, 06 Nov 2005 08:49:37 GMT"."\n\n";

このようにしてみましたが、効果なしでした。かなり高度なテクニックなんですかね?
510nobodyさん:04/06/24 22:11 ID:???
この手のはブラウザ依存すると思うので、セッションを持たせて、セッションデータから毎回ページを作リ直す、って方向でやった方がいいと思う。
511nobodyさん:04/06/24 22:13 ID:???
>>509
おまいには悪いが、誰もわからない悪寒・・・・・・・
ついでに>>507のいうようにスレ違いぽ
まあ一応
PERLでどうコーディングしたら出力がUAにキャッシュされるか
という質問みたいだからあながち的ハズレなスレ選びではないが。
どっちにしろ様子をみてる限りではわかる人は今のとこ、まだ来てないんじゃないか?
結局自力で調べるしかない。ガンガレ
512500:04/06/24 22:19 ID:???
>>510
シェア90%を誇るIEだけクリアできれば満足なんですが、やはり難しいんですね。
cgiの使い勝手のよさを上げようと思っただけなので、無理でも一応機能的には影響はないです。

>>511
応援ありがとうございます。頑張ります!
513nobodyさん:04/06/24 22:48 ID:???
http://www.mnot.net/cache_docs/
いいページ見つけた。俺も後で読んでみるよ。
514nobodyさん:04/06/24 23:03 ID:???
>>513
またウイルスだったりして・・・・とりあえず関係ない俺は踏まないでおこう。
515nobodyさん:04/06/24 23:10 ID:???
516nobodyさん:04/06/25 02:44 ID:???
ActivePerlをwin98に入れてPERLのテストしてるんだけど、-cを使った文法チェックが
うまくいかない。

コマンドプロンプトで
d:\perl\bin>perl -c ファイルへの絶対パス
でやってるけど、useがないものならうまくいくけどuseがあると何故かuseしてる行数に
エラーがあるって出力される。

実際にhttpdで表示させると問題なくできるやつだから、何が悪いのかわかんない・・・・

もしかしてActivePerlの文法チェク機能ってuseでモジュール読みこんでるとしくじるの?
ちなみにモジュールは自前のPERLだけで書いた簡単なやつ。

誰か何か知ってたら教えて下さい。
517nobodyさん:04/06/25 04:06 ID:???
>>516
>>1より抜粋

3: こんなエラーが出て上手く行かなかった。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

最低でも1と3が無いと誰も答えられないよ。
518nobodyさん:04/06/25 09:58 ID:???
>>516
何をuseしてるのかは書かないのか。
519nobodyさん:04/06/25 10:07 ID:???
use >>516の頭;
520nobodyさん:04/06/25 11:04 ID:???
syntax error at >>519 line 1, near "use>>516の頭" Execution of >>519 aborted due to compilation errors.
521nobodyさん:04/06/25 13:49 ID:???
範囲演算子って、小さい値〜大きい値の範囲じゃないと動かないんだね…

@Time = gmtime( time + 60 * 60 * 9 );
$Time[5] += 1900;
$Time[4] += 1;

ってしたときに、
sprintf( "%04d/%02d/%02d", @Time[5..3] );

がやりたかったんだけど。。
こういう場合って羅列するしかないんですかね?
522516:04/06/25 14:04 ID:???
どうゆこと?
useしてるものは自作のモジュールって書いたし。
エラーはuseが書いてある行数のとこで出てるって書いたけど、エラーの内容も出力されてるはずだから
それを出せってことかな?

ごめん。今からエラー文そのままあげます。
523nobodyさん:04/06/25 14:20 ID:???
>>522
俺は今日初カキコだが、>>517と同じことを思ったよ。
>useしてるものは自作のモジュールって書いたし。
ってあるけど、最後におまけのように書いてあるだけじゃん。普通に見落とすよ。
要するに質問の仕方がド下手糞ってことだ。

あるスクリプトを-cオプションでチェックするとエラーがでます。
環境は、Win98 + ActivePerl version○○です。

↓のようなスクリプトで、
---hoge.pl---
1: #!/usr/bin/perl
2: use mymodule; # 自作モジュール(簡単なPurePerlライブラリ)
------------

C:\>perl -c hoge.pl

とすると、

○○○ at hoge.pl line 2.

と出ます。

でも、CGIとしてhttpdに実行させると問題なく動きます。
もしかしてActivePerlの-cオプションはuseでモジュール読みこんでると失敗するのですか?
まず何を調べるべきでしょうか?
524nobodyさん:04/06/25 14:28 ID:???
>>521

sprintf( "%04d/%02d/%02d", reverse(@Time[3..5]) );
525nobodyさん:04/06/25 14:46 ID:???
@INC
526516:04/06/25 14:57 ID:???
>>523
ごめん。
D:\Perl\bin>perl -c C:\WINDOWS\デスクトップ\HTTPD1~1\CGI-BIN\TEST\B.CGI
これをやったら↓のエラーがでた。
Can't locate Test1.pm in @INC (@INC contains: D:/Perl/lib D:/Perl/site/lib .) at
C:\WINDOWS\デスクトップ\HTTPD1~1\CGI-BIN\TEST\B.CGI line 3.
BEGIN failed--compilation aborted at C:\WINDOWS\デスクトップ\HTTPD1~1\CGI-BIN\TEST\B
.CGI line 3.

b.cgiの中身は↓
#!/usr/local/bin/perl
push( @INC, 'C:\WINDOWS\デスクトップ\httpd142k\cgi-bin\test\Test1.pm' );
use Test1;
print "Content-type:text/html\n\n";
print "aiueoi";

useしているTest1.pmの中身は↓
package Test1;
#京
sub new{
my $self = shift;
my $obj = {a => 1 , b => 2};
bless $obj,$self;
}
1;

モジュールだけ-cに書けるとエラーはでないのでモジュール側には問題なしかと。
527516:04/06/25 15:51 ID:???
#!/usr/local/bin/perl

b.cgiを書き換えてみたけど、

package main;

BEGIN {
push( @INC, '/Test1.pm' );
}

use Test1;
print "Content-type:text/html\n\n";
print "aiueoi";

まだエラーだった。
Can't locate Test1.pm in @INC (@INC contains: D:/Perl/lib D:/Perl/site/lib . /Te
st1.pm) at C:\WINDOWS\デスクトップ\HTTPD1~1\CGI-BIN\TEST\B.CGI line 9.
BEGIN failed--compilation aborted at C:\WINDOWS\デスクトップ\HTTPD1~1\CGI-BIN\TEST\B
.CGI line 9.

@INCへの追加が失敗していて、読みこむファイルのパスが見つからないってことだよね?
528nobodyさん:04/06/25 16:18 ID:???
>>527
ああなるほど、こりゃ確かに >>516 の質問の仕方が悪い。

どうすればいいかを教えるのは簡単だが、その前に一つ質問に答えてくれ。

なんでまた、
「@INC に push しさえすればサーチパスを追加できる」
なんてことを考えたんだ?
529nobodyさん:04/06/25 17:01 ID:???
use libしろ。または、ちゃんとプログラムが置いてある所まで移動してやれ。
か、Perl/libに入れるとか
530516:04/06/25 17:25 ID:???
>>528
http://www.rfs.jp/sitebuilder/perl/
ここの@INCの説明にpushすればいいて書いてあったんだけど、意味を勘違いして受け取ったのかも;
それで
http://nonki.net/technical/perl/library/
ここの
>@INCに手動で追加する
っていうところ読んで、BEGINしてみたけどそれも間違ってたのかも;

>>529
use lib;
の一行を足してみたけど、駄目だった。それでプログラムが置いてあるフォルダに移動して
C:\WINDOWS\デスクトップ\httpd142k\cgi-bin\test>perl -c C:\WINDOWS\デスクトップ\HTTPD1~1\
CGI-BIN\TEST\B.CGI
をやったら
C:\WINDOWS\デスクトップ\HTTPD1~1\CGI-BIN\TEST\B.CGI syntax OK
成功した!感激!

Perl/libに入れるというのはプログラムをそのフォルダに入れとくって事?やってみたら
同じエラーがでた。

本当は@INCにどうやって追加すればいいんでしょうか?beginもうまくいかないし;
後、文法チェックでは>>526で書いたプログラムはエラーだけど、httpdで
http://localhost/cgi-bin/test/b.cgi
でやると問題なく動作するけど、サーバではエラーになるんですか?
まだサーバと契約してないから、試せない。
531田舎者 ◆BNNnMrNVbI :04/06/25 17:26 ID:???
おお!すごいなぁ。
532田舎者 ◆o0/tSn5Zoc :04/06/25 17:27 ID:???
最高ですね!
533nobodyさん:04/06/25 17:34 ID:???
初心者は perl をインタプリタ言語だと捉えがちで、確かに見た目はそう見えるが、
内部的にはコンパイル言語であり、そう認識しないと往々にして罠にはまる。

その罠の一つが use によるライブラリの読み込み。
use で指定したライブラリは、実行時ではなく、コンパイル時に読み込まれる。
たまに if($a==1){ use Foo::Bar;} なんてことをやる人がいるが、
この Foo::Bar はif条件に関係なく必ず読み込まれる。

同様に、初心者は push(@INC,'/hoge/fuga'); use Foo::Bar; と書くことで
@INC にパスを追加してから Foo::Bar を読み込んでくれる、と考えがちだが、
実際には コンパイル→Foo::Bar読み込み→実行→push の順で処理されるので、
Foo::Bar 読み込み時にはまだ @INC にパスが追加されておらず、エラーになる。
このような場合には、push ではなく、use lib を使う。
use lib '/hoge/fuga' と書いておくと、これがコンパイル時に処理されるので、
この時点で @INC に /hoge/fuga が追加され、そこから Foo::Bar を読んでくれる。
534516:04/06/25 17:49 ID:???
>>533
ありがとうございます!今
use lib "C:\WINDOWS\デスクトップ\httpd142k\cgi-bin\test";
を初めに追加してエラーだったので、
use lib 'C:\WINDOWS\デスクトップ\httpd142k\cgi-bin\test';
にしたら成功しました!シングルクォーテーションじゃないといけないんですね。

lib.pmがBEGINもやってくれてるんですね。
ところで、文法チェックの時以外でもlibを使って自作のモジュールを読みこむ必要が
あるんでしょうか?
モジュールを読みこむとそれだけ処理にかかる時間が増えますよね。なるべく軽くしたいのですが、
やはり自作モジュールをuseするプログラムには初めにlibでやっておいたほうがいいですか?

535516:04/06/25 17:52 ID:???
今シングルクォートならうまく行くことをしって、
BEGIN {
push @INC,'C:\WINDOWS\デスクトップ\httpd142k\cgi-bin\test';
}
をlibの変わりに書いたら、エラーがでないで文法チェックokでした!

どちらでも好きな方でやればいいってことですよね。
536500:04/06/25 18:45 ID:???
>>513
レス遅くなりました。
英語のサイトなんですね;nifty翻訳にでも書けてみます。
537nobodyさん:04/06/25 19:54 ID:???
>>534
ダブルクォーテーションは \ を特別に扱う話を聞いたことはないか?
print "\n"で何が出力される?
print '\n'で何が出力される?
538516:04/06/25 20:14 ID:???
>>537
初歩的なことを忘れてました;すいません。

ありがとうございました!
539nobodyさん:04/06/25 21:02 ID:QWdt1cCh
掲示板の文字色を選ぶラジオボックスをクッキー対応にしたいのですがどのようにやればよろしいでしょうか。
ラジオボタンは
<INPUT name="color" type="radio" value="#758CEA">
<FONT color="#758cea">■</FONT>
のようになっておりcheckedを入れることができればOKなわけですよね。
関係演算子を使ってもcheckedを入れるような方法が思いつきません。
どなたかアドバイスお願いします。
540nobodyさん:04/06/25 21:06 ID:???
>>539
そんな一部分だけ出されても答えようがない。
541nobodyさん:04/06/25 21:14 ID:QWdt1cCh
>>540
ココ以外には思いつかないのですが、どの辺を出せばよろしいでしょうか?
複数のラジオボタンからクッキーにあった一個を選ぶと言うものですが。
クッキーから前回使った色の読み込みはできます。
542nobodyさん:04/06/25 21:44 ID:???
>>541
お前、ここはPerlスレだぞ。
お前が貼り付けたのはどう見たって、HTMLにしか見えない。
543516:04/06/25 21:53 ID:???
>>541
俺ならそのラジオボタンの部分を全部PERLで動的に作成するかな。
$ENV{'HTTP_COOKIE'}の中身を条件文にかけて、$taguの中に何を入れるか決める。
それでできるよ。

例)
$cook = \$ENV{'HTTP_COOKIE'};
if ($cook eq "758cea" ) {
$tagu = qq|<INPUT name="color" type="radio" value="#758CEA" checked>|.
     qq|<INPUT name="color" type="radio" value="#000000">|;
}elsif($cook eq "000000"){

}else{〜}

とか。ちょっとブサイクなコーディングだけど、後は自分でもう少し処理を軽くするといいよ。
544516:04/06/25 21:54 ID:???
ごめん。$cookをifの条件文で使うときは$$cookとかでデリファレンスしてね。
545516:04/06/25 22:03 ID:???
なんかクッキーの読みこみ後に=以前を切るの忘れてた。
修正も兼ねてもっと簡単に。
if ( $ENV{'HTTP_COOKIE'} eq "hogehoge" ) {$c1 = "checked";}
elsif(〜){$c2 = "checked";}else{〜}
それで
<INPUT name="color" type="radio" value="#758CEA" $c1>
<INPUT name="color" type="radio" value="#758CEA" $c2>
でいいね。
546nobodyさん:04/06/25 22:12 ID:???
>>545
もし$c1にcheckedが入った場合$2には何が入るの?
0とかでもタグに不都合はないのかな…
547nobodyさん:04/06/25 22:15 ID:???
my @Color_key = qw/
758CEA
000000
:
:
:
/; # 必要数並べる。

my %Color;
# $Color{'758CEA'} = ' checked';
# $Color{'000000'} = ''; のように成るように久喜をパージングしる。

foreach (@Color_key){
printf qq|<INPUT name="color" type="radio" value="#%s"%s>|, $_, $Color{$_};
printf qq|<span style="background: transparent; color:#%s">■</span>|, $_;
}
548nobodyさん:04/06/25 22:28 ID:???
>>546
まあほとんどの場合は undef が空文字列として展開されると期待されるだろう

漏れなら Template Kit 使うけど
549516:04/06/25 22:30 ID:???
>>546
初めに
$c1 = "";
$c2 = "";
をしておく。
if文とかの制御構文はある程度勉強しておくといいよ。ちなみに>>545の場合
真がでてそのブロック処理をした時点でそれ以降の処理はおこなわれない。
550nobodyさん:04/06/25 23:03 ID:???
こんなんとかってダメなん?

%COLOR_NUM = (1 => "#000000", 2 => "#FF0000", 3 => "#008040", 4 => "#0000FF", 5 => "#C100C1", 6 => "#FF80C0", 7 => "#FF8040");
print <<"EOF";
<TD>Color:</TD><TD><SELECT name="color" style="width : 40px;">
EOF
foreach (sort keys %COLOR_NUM) {
    if ($COOKIE{"color"} eq $COLOR_NUM{$_}) {
        $selected = " selected";
    } else {
        $selected = "";
    }
    print "<OPTION value=\"$COLOR_NUM{\"$_\"}\" style=\"color : $COLOR_NUM{\"$_\"};\"$selected>■</OPTION>\n";
}
print <<"EOF";
</SELECT></TD>
EOF
551nobodyさん:04/06/25 23:19 ID:???
しばらくして気付いたけど、ラジオボタンだったんか・・・
まぁ似てるからいいか。
552nobodyさん:04/06/26 04:58 ID:???
すごく初歩的な質問ですみませんが、連想配列のkeyの名前は通常何文字くらいが理想ですか?

$hash{abcde}
今はこのように長くても5文字位に抑えてますが、できるだけわかりやすい名前をつけたいので
多少長く10文字くらいになってしまいそうになるのですが、重くなったりしそうで不安です。

みなさんはハッシュのキーを何文字くらいに収めようとしていますか?
553nobodyさん:04/06/26 05:10 ID:???
>>552
わかりやすい名前をつけるのを優先させればよい。
重くなるかどうかはベンチマークをとってみればわかる。
554nobodyさん:04/06/26 05:48 ID:???
>>552
おまい朝早ええな!
俺は16文字位まで。多分他のやつより長めだと思う。
っていうか誰かマジで作ったプログラムで、20文字超えたやついるのかな?
555nobodyさん:04/06/26 05:53 ID:???
長さなんて気にしたことないな。
どうせ内部では数値に変換されるんでしょ、と思ってるから。(されてないかも)
556nobodyさん:04/06/26 11:15 ID:???
>>555
されてる。

俺はだいたい7文字ぐらいかな。
複数の単語が入ってるときは、多分何かがおかしい。
例:
$hash{HOGE_NUMBER}
$hash{HOGE_NAME}
$hash{HOGE_EMAIL}
おれなら↓こうする
$hash{HOGE}{NUMBER}
$hash{HOGE}{NAME}
$hash{HOGE}{EMAIL}
557nobodyさん:04/06/26 12:12 ID:???
アクセスログの処理なんかで平気で$_log{'http://pc5.2ch.net/test/read.cgi/php/1085557731/'}ってやってるけど...?
558nobodyさん:04/06/26 13:02 ID:???
>>557
そういうのはありだ。
> 'http://pc5.2ch.net/test/read.cgi/php/1085557731/'
は自分で付けた名前じゃないだろ?
559nobodyさん:04/06/26 17:23 ID:???
間違えてム板に書いてしまいました。
質問させてください。

トラックバックのpingを実装しようとSocketでPOSTリクエストをする
スクリプトを書きました。実際にリクエストはできるのですが、相手側からの
意図した応答が得られませんでした。リクエスト内容を教えていただけませんか?

ttp://lowlife.jp/yasusii/stories/8.html
ここのリクエスト内容を参考にしました。

ttp://www5e.biglobe.ne.jp/~halcyon/cgi-bin/tb/test.txt
書いたスクリプトです。

よろしくお願いします。
560nobodyさん:04/06/26 17:40 ID:???
>>559
You must encode URL.
561nobodyさん:04/06/26 20:38 ID:???
>>559
You must read thread title.
562nobodyさん:04/06/26 21:33 ID:???
>>559
I suggest you use Net::TrackBack.
563nobodyさん:04/06/26 22:19 ID:???
This is a English-Speaking thread here.
564nobodyさん:04/06/27 00:14 ID:???
>>563
s/ a / an /;
565nobodyさん:04/06/27 00:27 ID:???
パンチ5分の2のバカはどこいった?絶対一生続けるって豪語してたくせに(プゲラ
566nobodyさん:04/06/27 01:11 ID:???
煽るなよヴォケが
567nobodyさん:04/06/27 01:23 ID:???
まぁ、なんだ、Perlのパンチ5分の2とPHPの本7は一生治らんな
568nobodyさん:04/06/27 04:44 ID:???
スカラー変数のリファレンスってどれくらいのデータを格納できるの?2.71KBってやりすぎ?
$self->{data} = "ここで代入できる文字列の長さが知りたい";

リファレンスは元々格納場所へのアドレスを持ってるだけで、スカラに格納するわけでは
ないから大丈夫だよね。ってリファレンスじゃなくても別に大丈夫だよね?重くなるだけで。

HTML本文をそのままスカラに入れてそれを好きな文字コードに変換したいなあと思ってるんだけど
スカラに入れて一括変換なんてやるべきではないかな?

変換はjcode.pl使う。
569nobodyさん:04/06/27 05:24 ID:???
2KBなんてハエのうんこみたいなもんだ。
570nobodyさん:04/06/27 07:27 ID:???
>>569
そうなの?ならモジュールのファイルサイズが20KBでも大したことないよね?

何KBくらいからやりすぎになるの?例えば外部から30KB位のファイル読みこんで
open(FH,"uwa30kb.txt");
$a = join '',<FH>;
とかでもゴギブリの卵くらい?
571nobodyさん:04/06/27 07:59 ID:???
>>570
> 何KBくらいからやりすぎになるの?

仮想メモリーを使うくらい。
572nobodyさん:04/06/27 10:44 ID:???
apache の RLimitMEM 制限に引っかからないくらい。
573nobodyさん:04/06/27 15:33 ID:???
>>462

1<>い<>12:50<>
4<>あ<>20:02<>
2<>き<>08:41<>


$buf = $ENV{'QUERY_STRING'};
$buf =~s/[^0-9]//g;
@txt = sort{(split(/<>/,$b))[0] cmp (split(/<>/,$a))[0]}@txt if($buf==1);
@txt = sort{(split(/<>/,$b))[1] cmp (split(/<>/,$a))[1]}@txt if($buf==2);
@txt = sort{(split(/<>/,$b))[2] cmp (split(/<>/,$a))[2]}@txt if($buf==3);

観覧者が見たい順にソートしたいんで、今はこのようにしてるんですが、
ハッシュの使い方がいまいち分かりません。
もう少しヒントを頂けないでしょうか?
574nobodyさん:04/06/27 16:44 ID:???
まぁ、正直寂しい
575nobodyさん:04/06/27 22:33 ID:???
PERLのレスポンスヘッダで文字コードを指定するときって
print "Content-type:text/html;charset=Shift_JIS\n\n";
print "Content-type:text/html;charset=euc-jp\n\n";

JISの場合はなんて書くんだっけ?
576nobodyさん:04/06/27 22:38 ID:???
検索エンジンって便利なものがあるらしいよ
577nobodyさん:04/06/27 22:44 ID:???
cgiからSSI使ってincludeしたいんだけど
cgiからのSSI許可をしてしまうとセキュリティー的にもあぶなさそう(掲示板などで自由に実行されてしまう等)なので他にSSIと同等のことができる方法はないでしょうか?
教えて下さい。お願いします。
578nobodyさん:04/06/27 22:47 ID:???
意味がわかりません。
579nobodyさん:04/06/27 22:57 ID:???
>PERLのレスポンスヘッダ
ハ?
共通だろ
580577:04/06/27 22:59 ID:???
perlスクリプトAとperlスクリプトBがあるとします。
やりたいことは
perlスクリプトAからPerlスクリプトBが出力する結果を取得してPerlスクリプトAで表示したいのです。
呼び出し元がただのhtmlならSSIを使えば簡単に実現できますがCGIからの呼び出しでは実行できません。
何かいい方法がありませんか?
581nobodyさん:04/06/27 23:11 ID:???
>>580
普通にできると思うが。。。
582577:04/06/27 23:20 ID:???
>>581
できるのは分かっていますが許可した場合第三者が掲示板の本文などにSSIでシステムコマンドなどを実行できてしまうので許可していないんです。
583nobodyさん:04/06/27 23:24 ID:???
>>582
AからBに処理を渡してその戻り値をAで使いたい。
別に普通にできるし、なんでSSIとか掲示板とか許可とかの話になるん?
すいませんが、何を悩んでるのかわかりません。
584nobodyさん:04/06/27 23:48 ID:???
>>583
その方法を577は教えろと言ってんじゃないの?
585nobodyさん:04/06/27 23:54 ID:???
以前こちらで質問した>216なんですが、また少しお聞きしたい事があります。

@data = ('A,7,緑',
'C,6,青',
'B,4,赤',
'A,9,紫',
'A,2,黄緑',
'B,10,黄',
'C,3,青紫');

上記のような配列があり、これを一項と二項目でソートしたいのですが、
ここでもう一つの条件、
二項目の比較にある数字にもっとも近い数字からソートする、
という条件を加えたいのです。

例えば 二項目が 8 にもっとも近い数字からソートした場合

@data = ('A,9,紫',
'A,7,緑',
'A,2,黄緑',
'B,10,黄',
'B,4,赤',
'C,6,青',
'C,3,青紫');

といった感じにしたいのです。

前にお聞きした方法で作業を進めていたのですが、
どうしてもこの問題で詰まってしまい困っています。
何か良いお知恵があれば何卒ご教授下さい。
586nobodyさん:04/06/27 23:59 ID:???
方法ったって、標準出入力介してもいいだろうし、
AからBをrequireするなり、モジュールにしてuseしてもいいだろうしさ。
evalとかdoとかの話もするの?

あ、ただCGIスクリプト内で別のCGIスクリプトの出力をそんまま
取り込みたい、って話なら、それは「CGIのお作法」の話なので、
別をあたってください。
でもそれならperlスクリプトAとBでって聞き方はおかしいよ。
587nobodyさん:04/06/28 00:54 ID:???
>>585
前言われたやり方+シュウォルツでうまいことやりなさい。
588nobodyさん:04/06/28 01:40 ID:???
$base= 8;
for (map{$_->[0]} sort {($a->[1] < 0 ? -$a->[1] : $a->[1]) <=> ($b->[1] < 0 ? -$b->[1] : $b->[1])} map{[$_,$base-(split',')[1]]}@data){
print $_,"\n";
}
589nobodyさん:04/06/28 03:19 ID:???
>>588
わかりづら!
590nobodyさん:04/06/28 05:19 ID:???
変数名に使えるのってアンダーバーと英数字だよね?

<input type=image src="hoge.jpg" name=test>

でも↑をsubmitとして使って、PERLで受けとると
test.x=
test.y=
が付いてきて、
foreach ( split /&/,$ENV{'QUERY_STRING'} ) {
(my $a , my $b ) = split /=/;
$form{$a} = $b;
}
とかやると、%formのキーにtest.xっていうのができちゃう。
一応動作に支障はないけど、ハッシュのキーにピリオド使っていいの?
591nobodyさん:04/06/28 05:45 ID:???
>>585
my $base = 8;
my @sorted =
  map $_->[3],
  sort { $a->[0] cmp $b->[0] || $a->[1] <=> $b->[1] || $b->[2] <=> $a->[2] }
  map { /^([^,]+),([^,]+)/; [ $1, abs($2 - $base), $2, $_ ] }
  @data
;
print map "$_\n", @sorted;
592nobodyさん:04/06/28 06:02 ID:???
条件式?:の条件演算子って条件式で真なら左辺を偽なら右辺を返すから普通は
$a = $b == 0 ? 1:2;
みたいに使うんだろうけど、
map{ /a/ ? $a += $a : $b += $a } @array;
みたいに真と偽の時の処理に↑みたくやるのも正しい使いかた?

これ使うと今の長いソースが短くできるからやりたいんだけど、HTMLでStrict厨な俺は
PERLでもなるべく正しい関数の使い方をしたいとか思ってる;

?:をifみたく処理の分岐で使うのはどうなの?
593nobodyさん:04/06/28 06:16 ID:???
>>591
sort関数ってどうなってるんですか?
@old=(1,a,4,f,5);
@new = sort{$a <=> $b}@old;
こうゆうのよく見ますけど、どうゆう流れで処理が行われているのかわかりません。
mapみたいに@oldからはひとつづつ要素が渡されてるんですよね?
その渡された要素は$_に入っているわけではなさそうですが、$aと$bには何が入ってるんでしょうか?

594nobodyさん:04/06/28 06:49 ID:???
>>593
リスト中のどれか2つの要素。
どれがどの順で何回渡されるかは決まってなかったような。
(sortで使ってるアルゴリズムにもよるだろうし)
595nobodyさん:04/06/28 09:18 ID:???
>>592
Perlの存在自体を否定しているのですね。
596nobodyさん:04/06/28 09:39 ID:???
>>592
なるべくなら $a $b は使わない方がいい。
あとは、perl 添付のドキュメントを読む。描き方に関しては perlstyle あたりを中心に。
597nobodyさん:04/06/28 14:51 ID:cJ2UZAf9
次のようなリストを読み込んでレコードを追加したいのです
データ区切りは<>を使い文字列にカンマが入っても対応できる
ようにしてあります。
一番先頭のデータを重複の無いキー番号としたいのです

そこでレコード追加時に先頭のデータをチェックして
最大値の次の値と先頭にアルファベットを追加してキー番号を
生成したいのですが、どの様にプログラムを組めばよさそうでしょうか?


A000001<>xxxx<>XXXXX
A000003<>xxxx<>XXXXX
A000010<>xxxx<>XXXXX
A000004<>xxxx<>XXXXX
A000008<>xxxx<>XXXXX
598nobodyさん:04/06/28 15:04 ID:???
>>597
既出レコードIDの最大値に+1=追加レコードのID、てわかってるならそうすればいいじゃん。
途中まででもいいから自分でやってみるべし。
599nobodyさん:04/06/28 15:23 ID:whqvquC3
<form method="post">で送られてきたデータを
read(STDIN,$in,$ENV{'CONTENT_LENGTH'});

な形で取得しようとしているのですが長い文章の場合に途中までしか取得
できません。

$inを以下のような感じで出力させると、
print $ENV{'CONTENT_LENGTH'};
print length($in);

$ENV{'CONTENT_LENGTH'} が 8205 のときはlength($in)は 8000 と出力され、
$ENV{'CONTENT_LENGTH'} が 9252 のときもlength($in)は 8000 と出力されます。
$ENV{'CONTENT_LENGTH'} が 8000を下回った場合にはlength($in)は同じ数値が出力されます。

どっちにしても8000しかreadが出来ていないようなのですがどうしてなんでしょうか?

環境はIE6 + redhat9 + perl v5.8 です。
600nobodyさん:04/06/28 15:30 ID:vj4wrqzo
教えてください。
cgiを直接呼ばれたのとpostで来たのとを区別するにはどうしたらいいのでしょうか?
601nobodyさん:04/06/28 15:33 ID:???
readって必ず指定した長さまで一気に読めるわけではないので、
ループしないとだめじゃない? とくに入力元がpipeやsocketのときは
適当にどこかのバッファ長まで読まれた状態でひとまず戻ってくる
ことはよくある。

602nobodyさん:04/06/28 15:36 ID:???
603nobodyさん:04/06/28 15:38 ID:???
>>599
勉強のためとかじゃなけりゃCGIモジュール使った方がいいような気がする。
604593:04/06/28 16:26 ID:???
>>594
>リスト中のどれか2つの要素。
>どれがどの順で何回渡されるかは決まってなかったような。
>(sortで使ってるアルゴリズムにもよるだろうし)

ランダムに選ばれた?二つの要素が$aと$bに入れられて、$aの方が大きければ1を等価なら0を
左の方が大きければ-1を返す?$aの方が大きければ$aに入っている要素を左に返す?
$aの中身を左辺に返した場合は元のリストの中からは消えるのですか?

なんかイマイチ流れがわかりません。sort関数については色々見に行きましたが、内部の具体的な
流れが解説されてるサイトが見つかりませんでした;

>>602
perldocは英語ですよね;翻訳かけると関数名まで翻訳されちゃってイマイチ理解できないんですよね;
したのサイトは見たことあります。
605nobodyさん:04/06/28 16:30 ID:???
>>604
QuickSortのアルゴリズムを調べてみれ。多分分かる。
606nobodyさん:04/06/28 18:51 ID:???
>>602
英語が読めないなら駱駝本を買えばいいのに。
http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod

$a と $b に何が入るかは >>602 のページに明示されているし、
sort 関数の使い方ではなくソートアルゴリズムの話ならこの辺
行った方がいいよ。
http://pc5.2ch.net/test/read.cgi/tech/1088022524/
607526:04/06/29 04:35 ID:???
>>526で質問したものですが、自分で作ったモジュールを@INCに追加したい場合は
use lib 'C:\WINDOWS\デスクトップ\httpd142k\cgi-bin\test';

BEGIN{
push @INC,'C:\WINDOWS\デスクトップ\httpd142k\cgi-bin\test';
}
でやるのはわかったのですが、'C:\WINDOWS\デスクトップ\httpd142k\cgi-bin\test'
は絶対パスでないといけないのですか?

サバにアップしたときの事を考えて相対パスでいいならそうしておきたいのですが、
use lib '../c';
use lib '..\c';
などをやってみたところ文法チェックでエラーがでました。ローカル環境ではライブラリを@INCに
追加する時のパスをドライブ名からの絶対指定でないと無理でしょうか?

環境は
win98/ie6/httpd/activeperl5.6/
です。
608nobodyさん:04/06/29 05:03 ID:???
>>607
漏れはローカルとサーバ両方でパスとかを書き換えず動かしたいので、
my $server = $ENV{'REMOTE_ADDR'} eq '127.0.0.1' ? 'http://127.0.0.1/' : 'http://www.鯖.com/' ;
って事をしている。
609nobodyさん:04/06/29 05:55 ID:???
>>607
>文法チェックでエラーがでました。
そのエラーメッセージを書こう。

ちなみに相対パスの指定は可能。存在しないパスを指定する事も可能。
e.g. use lib qw(../ /home/you/lib/perl E:/lib/perl);

>>608
use CGI ':cgi';
print server_name();
610607:04/06/29 06:07 ID:???
>>608
それいいですね。でも相対指定ができるならそのほうが楽ですが。
>>609
エラー文は以下の通りです。続いてファイルの中身を挙げます。

C:\WINDOWS>perl -c C:\WINDOWS\デスクトップ\HTTPD1~1\CGI-BIN\TEST\C\A.CGI
Can't locate Test1.pm in @INC (@INC contains: ../c D:/Perl/lib D:/Perl/site/lib
.) at C:\WINDOWS\デスクトップ\HTTPD1~1\CGI-BIN\TEST\C\A.CGI line 3.
BEGIN failed--compilation aborted at C:\WINDOWS\デスクトップ\HTTPD1~1\CGI-BIN\TEST\C
\A.CGI line 3.
611607:04/06/29 06:09 ID:???
a.cgiの中身

#!/usr/local/bin/perl
use lib '../c';
use Test1;
#京
print "Content-type:text/html;charset=euc-jp\n\n";
print "aiueo";

Test1.pmの中身

package Test1;
#京
sub new{
my $self = shift;
my $obj = {a => 1 , b => 2};
bless $obj,$self;
}
1;

a.cgiのlibの一行を
use lib 'C:\WINDOWS\デスクトップ\httpd142k\cgi-bin\test\c';
にするとオーケーがでます。\を/に変えてもオーケーはでます。

相対パスにすることは可能でしょうか?
612nobodyさん:04/06/29 06:16 ID:???
質問!
演算子って同じような意味のものがあったりするけどどうしてでしょうか?
>や<の比較系は
数値用として<,>,==,<=,>=
文字列用としてgt,lt,eq,ge,le

それで、
and,or

||,&&
も用途別なんでしょうか?優先順位は||,&&の方が高いみたいですが。
これも
数値用||,&&
文字列用or,and
なのですか?でも
$a == 1 || $a == 2
ならいいですが、
$a == 1 || $a eq "ふたつ"
の場合は||とorのどちらを使えばいいでしょうか?
613nobodyさん:04/06/29 06:22 ID:???
CGIで単純にtextを出力してブラウザに表示させたいのですが
ブラウザで開くとダウンロードのダイアログが開いてしまいます。
ダウンロードではなくそのままブラウザに表示したいので
アドバイスをください。
以下のようにして出力しています。

#!/usr/bin/perl
print qq(Content-type: text/plain\n\n);
print "minapon";
exit;

宜しくお願いします。
614nobodyさん:04/06/29 06:23 ID:???
$fooの「何文字目まで」を抜き出す、というやり方はありますか?
ありましたらお教え下さいますようお願いいたします。
615607:04/06/29 06:29 ID:???
>>614
$newfoo = substr $foo,hoge1,hoge2,"hoge3";

hoge1=オフセット。取り出しの起点。
hoge2=取り出す長さ。
hoge3=取り出した後にそこに何か入れる場合は。取り出したものを削除するなら""とする。

詳しくは
perl substrでググれば見つかるかと。
616607:04/06/29 06:32 ID:???
>>613
#!/usr/local/bin/perl
print qq(Content-type:text/plain\n\n);
print "qwertyui";
exit();

をローカル環境でやったけど何も問題はなく表示されたよ?
617nobodyさん:04/06/29 06:50 ID:???
>>613
激しく板違い。Web鯖の設定。

Options ExecCGI
AddHandler cgi-script .cgi
AddType application/x-httpd-cgi .cgi

各行の意味を確認したうえで好きなようにどうぞ。
618nobodyさん:04/06/29 06:52 ID:???
>>616ありがとう御座います
私の環境で>>616のコードでローカルでテストしてみましたが
やはりDLのダイアログが開きます
サーバにアップロードしても同じでした。

ブラウザ側の問題かも知れませんが
ちゃんとtextをブラウザで開ける場合もあるし・・・
619nobodyさん:04/06/29 09:51 ID:???
DLダイアログ上のファイル名はなに?
DL後のファイルの中身はなに?
HTTPサーバーは?ブラウザは?

まぁ、どっちにしろサーバー設定かブラウザの問題だね。
620nobodyさん:04/06/29 10:18 ID:???
どういう環境でやってるか知らんが、MIMEタイプ周辺の問題じゃないか?
621nobodyさん:04/06/29 10:50 ID:???
>615
有難う御座います。
Perlのリファレンス見てたんですが、語句が思い当たらなかったのでたどり着けなかったんです。
ホントに助かりました。
622nobodyさん:04/06/29 14:33 ID:???
MD5暗号化、照合ライブラリってないものでしょうか。
cryptがサーバ対応してなくてMD5使えないもので、
教えていただけたら幸いです。
623nobodyさん:04/06/29 16:29 ID:???

- - - - - Perl コーディング初心者質問コーナー Part35 - - - - -
624nobodyさん:04/06/29 16:46 ID:???
>>622
MD5.pm

>>612
おそらく優先度の違いだけかと。 好みの問題だけど、括弧を減らしたいときなどに、and, orを使うといいと思う。
らくだ本ではand, orのほうが自然だからこっちのほうがいい、見たいなことがかかれていた気がしないでもない。
625nobodyさん:04/06/29 17:19 ID:???
>>611
> C:\WINDOWS>perl -c C:\WINDOWS\デスクトップ\HTTPD1~1\CGI-BIN\TEST\C\A.CGI
C:/WINDOWS からの相対パス ../c は C:/c で

C:/c/Test1.pm
D:/Perl/lib/Test1.pm
D:/Perl/site/lib/Test1.pm
./Test1.pm

のいずれも見つからないとエラーメッセージが言っているわけだが。

>>612
http://perldoc.jp/docs/perl/5.6.1/perlop.pod
626607:04/06/29 21:39 ID:???
>>625
ありがとうございます。早速
use lib 'C:/c';
にかえてやってみました。

C:\WINDOWS>perl -c C:\WINDOWS\デスクトップ\HTTPD1~1\CGI-BIN\TEST\C\A.CGI

Can't locate Test1.pm in @INC (@INC contains: C:/c D:/Perl/lib D:/Perl/site/lib
.) at C:\WINDOWS\デスクトップ\HTTPD1~1\CGI-BIN\TEST\C\A.CGI line 3.
BEGIN failed--compilation aborted at C:\WINDOWS\デスクトップ\HTTPD1~1\CGI-BIN\TEST\C
\A.CGI line 3.

というエラーでした。
C:/c D:/Perl/lib D:/Perl/site/lib
少しエラー内容が変わりましたがやはり駄目なようです。
627nobodyさん:04/06/29 21:47 ID:???
>>626
おいアホかC:/cの中にTest1.pmがあんのかよ!?
628nobodyさん:04/06/29 21:49 ID:???
>>626

>>625
>C:/WINDOWS からの相対パス ../c は C:/c で
ってのは
 C:/WINDOWS からの相対パス ../c は C:/c のことだ
の意味だ(と思われる
629nobodyさん:04/06/29 22:17 ID:???
>>626
> use lib 'C:/c';
> にかえてやってみました。

>>625がコケてそう。

use lib '../../../cgi-bin/test/c';

C:\WINDOWS>cd デスクトップ\HTTPD1~1\CGI-BIN\TEST\C
C:\略>perl -c a.cgi
630607:04/06/29 22:46 ID:???
>>627-629
すみません。

>>629
C:\WINDOWS>cd デスクトップ\HTTPD1~1\CGI-BIN\TEST\C
これをやって移動した場合はlibはなくてもエラーはでないです。
質問としましては、どのフォルダからでも文法チェックができるように自作モジュールを
コンパイルの初めに@INCに追加してやりたいんですが、そのモジュールのある場所を相対指定できませんか?
ということです。

それで一応
use lib '../../../cgi-bin/test/c';
use lib 'C:../../../cgi-bin/test/c';
に変えて試しましたが、やはり下のエラーでした。(1行目の場合のエラー内容です。)

C:\WINDOWS>perl -c C:\WINDOWS\デスクトップ\HTTPD1~1\CGI-BIN\TEST\C\A.CGI
Can't locate Test1.pm in @INC (@INC contains: ../../../cgi-bin/test/c D:/Perl/li
b D:/Perl/site/lib .) at C:\WINDOWS\デスクトップ\HTTPD1~1\CGI-BIN\TEST\C\A.CGI line
4.
BEGIN failed--compilation aborted at C:\WINDOWS\デスクトップ\HTTPD1~1\CGI-BIN\TEST\C
\A.CGI line 4.

>>628
ここまで書いて今気づきました。
>C:/WINDOWS からの相対パス ../c は C:/c で
../cはC:/cと書いてるのと同じことになるってわけですね;すみません勘違いしました。

それでやはり相対指定はムリなのでしょうか?
631607:04/06/29 22:50 ID:???
今やっと気づきましたが、この場合の相対指定っていうのは、コマンドプロンプトの現在位置
からによる相対していなのですね?合ってます?

そうなるとコマンドプロンプト自体がフォルダ移動すると、パスが変わってくる。だからムリ?

でもなんかまだ勘違いしてるかもしれません。a.cgiに書くパスを相対パスにすると
何に対しての相対になるんでしょうか?a.cgiではないですよね?
632nobodyさん:04/06/29 23:22 ID:???
>>631
> use lib '../../../cgi-bin/test/c';
スマソ、↑寝ぼけてますた。
吊ってきます。

カレントディレクトリ。
633607:04/06/29 23:30 ID:???
>>632
カレントディレクトリということはやはり、プロンプト画面の現在作業場所からということになり、
結局libは相対指定が効かないということでよろしいでしょうか?
634nobodyさん:04/06/29 23:43 ID:d2XzHbrj
変数に入っている特定の文字の長さを調べるにはどのようにすればよいでしょうか?
$test = abc123;
と入っている場合、数字の数だけ調べたいのです。
どなたか、ご教授お願いします。
635nobodyさん:04/06/29 23:47 ID:???
>>633
気づいてなかったんか。 DOSの作業ディレクトリだべ
636607:04/06/29 23:59 ID:???
>>635
ですよね。でもそうなると、libに渡すパスは相対指定が不可能ですよね?
でも>>609さんが相対パスは可能と言っていたのでよくわかりません。

ちなみにサーバにあげた場合もlibのパスを相対で書くと、DOS(UNIX系なので違うぽ)作業ディレクトリ
が基準になりますよね?

その場合はDOSは自動で、a.cgiがある場所まで移動してからコンパイルを行うのでしょうか?
そうだとするとサバ上ではa.cgiがあるフォルダからの相対パスで行けますよね。
でもわざわざ作業ディレクトリを移動してからコンパイルなんてしませんよね。

結局相対パスはあまり使い物にならないんですかね。サバのカレントディレクトリから書けば
サバでは相対にできそうですがやはり絶対指定しておくのが無難ぽいですね。

長くお付き合いいただきありがとうどざいました。失礼します。
637607:04/06/30 00:00 ID:???
>>634
まずは正規表現で数字だけ抜き出して、その長さを測ってみてはどうでしょうか?
638nobodyさん:04/06/30 00:18 ID:???
>>632 >>636
スクリプト中に書かれた相対パスは全てカレントディレクトリからの
相対パスであって、スクリプトが置かれているディレクトリからの
相対パスではない。@INC に相対パスを指定する事は可能だが、
君が常にスクリプトの置かれているディレクトリをカレントディレクトリ
として起動しない限り、期待するディレクトリを指す事にならない。
故に、モジュールやライブラリは通常特定のディレクトリに置き、
絶対パスで指定する事でどこからでも利用可能にする。

どうしてもスクリプトが置かれているディレクトリからの相対パスを
使いたいのなら、スクリプトの最初に以下のような阿呆らしいコード
を追加する事で可能になる。

BEGIN {
  __FILE__ =~ m|^(.*[/\\])[^/\\]+\z|;
  require 'lib.pm';
  lib->import($1 . '../log');
}
639ウド:04/06/30 18:25 ID:???
サーバー:Turbo Linux、apache1.3.xx、Perl5
クライアント:WindowsXP Pro
これまで同じスクリプト(簡単なメモCGI)をWindows2k、apache2.0.x、perl5にて動作させておりました。
サーバー変更に伴い、文字コードをshift-jisからeucに変更しました。

Windows2kサーバーにて動作させたところ正常に動作しました。
確認後にLinuxに移しました。
Linuxにて動作させたところ、Winクライアントから書き込んだらログファイルの
文字コードがshift-jisにて保存されてしまい、正常に動作しなくなりました。

考えられる原因はなんでしょうか?
ログファイル、スクリプトファイルともにEUCにて保存、アップロード。
cgi-lib.pl使用、jcode.plは使用していません。
データの受け取りは&ReadParse(*form);として、form{'comment'}として
うけとっています。
フォームはvalue=\"comment\"です。
スクリプトの先頭で文字コードをeuc-jisと設定しています。
640ウド:04/06/30 18:54 ID:???
追記
ログファイルに少しでもデータがある場合(追記のような状態)、ログファイルに
セットされた文字コードが適用されるようです。
print OUT,">log.dat";とかにすると、文字コードがshift-jisに再セットされてしまいます。
Linuxからの入力は問題ありません。
641nobodyさん:04/06/30 21:37 ID:???
(スクリプトファイルではなく、)フォームのページの文字コードをEUCに変えてみよう。
もしくは、CGI側でEUCに変換してもいいと思う。
あと、cgi-lib.plはもういらないでしょ。jcode.pmかencode.pmを使おう。
642nobodyさん:04/07/01 08:22 ID:???
>>639
CGIで使うのならわざわざEUCに変えなくても動くでしょ。
643ウド:04/07/01 10:36 ID:???
>>641
フォームも同一スクリプトで生成しているので、ヘッダではeuc-jisで指定しています。
cgi-lib.plはフォームのハッシュを扱うのに楽だったので使用していました。
今、CPANからJcode.pmを取得しインストールしました。
これと組み合わせて使ってみます。
アドバイスありがとうございました。

>>642
動きますが、個人的にEUCが好きなものでして。
製作するスクリプトのコードもEUCにしている為なにかと都合がいいのです。
644nobodyさん:04/07/01 12:52 ID:oq3ug3s3
>>598
EXCELにあるような最大値を求める関数がみあたらないのですが、どうしたらいいものでしょうか?
645nobodyさん:04/07/01 13:10 ID:???
>>644
それぐらい自分でサブルーチンを作りましょう。
646nobodyさん:04/07/01 13:16 ID:???
>>644
record.txt
--
A000001<>xxxx<>XXXXX
A000003<>xxxx<>XXXXX
A000010<>xxxx<>XXXXX
A000004<>xxxx<>XXXXX
A000008<>xxxx<>XXXXX
--
open IN, 'record.txt' or die "$!\n";
while(<IN>){
chomp;
$record{(split(/<>/,$_))[0]} = $_;
}
print (((sort keys %record))[-1]);
--
出力:A000010

昇順に並べれば一番後ろが最大値
降順に並べれば一番最初が最大値
647nobodyさん:04/07/01 15:27 ID:???
>>644
List::Utilのmax使え。速いぞ。

ttp://pc5.2ch.net/test/read.cgi/tech/1085564875/71-72
648 ◆u2YjtUz8MU :04/07/01 21:05 ID:???
gifやjpeg画像を表示するときに
画像の大きさが一定以上大きいときだけ
縮小して表示したいのですがどうやればいいか教えてください。
よろしくお願いします。
649nobodyさん:04/07/01 21:25 ID:???
>>648
if(でっかい時){ 縮小処理や縮小表示 }
else{ そのまま表示 }
これのどの部分が分からんのだ?
そのことを>>1の書き方で表すとどうなるのだ?
650nobodyさん:04/07/01 21:25 ID:???
黙れ。
651648:04/07/01 21:31 ID:???
画像の幅を知るにはどうすればいいですか?
また、画像の縦と横の比率を崩さずに
横幅を100〜150にして表示したいときの
うまい方法はありませんか?
652nobodyさん:04/07/01 21:33 ID:???
タグぐらい勉強しろよ
653nobodyさん:04/07/01 21:37 ID:???
>>651
フリーの画像掲示板とかのソースを参考にしたらいい。
654nobodyさん:04/07/01 21:46 ID:???
PerlMagickとか使えばいいんじゃないのかね?
655nobodyさん:04/07/01 21:49 ID:???
>>651
「gif perl 画像サイズ」でググる。jpgの場合も同様。
画像サイズ取得ライブラリって形で公開してる人が多いなぁ。
ゴリゴリ書くサンプルが多いだろうと思ってググってみたんだが....
> 画像の縦と横の比率を崩さずに横幅を100〜150
こりゃ、中学か下手すりゃ小学校で習う計算だな。
656nobodyさん:04/07/01 22:48 ID:???
>>651
Image::Size
あと、htmlだけどwidthだけしてすればheightは自動で同率で表示する。
>  こりゃ、中学か下手すりゃ小学校で習う計算だな。

だな
657nobodyさん:04/07/01 23:55 ID:???
>>643
書きまちがいだと思うけど、euc-jpね。
あと、ブラウザが自動的に判断してくれるはずだから、
HTTPヘッダとかMETAタグとかは使わずに、何もせずにHTMLの出力をやってみたらどうだろうか。
658648:04/07/01 23:55 ID:???
みなさんありがとうございました。
一応完成しました。
ひまつぶしに見てください。
http://www.tcn.ne.jp/~majima/dog/quiz/quiz.cgi
659nobodyさん:04/07/01 23:56 ID:???
そう言えば、GIFの特許切れに絡んで、GDのバージョンアップってあったんだろうか?
660nobodyさん:04/07/02 00:02 ID:???
jcode.plでエラーが出てしまいます。

[Thu Jul 1 23:57:20 2004] test.pl: Malformed UTF-8 character (overflow at 0x302b374a, byte 0xa5, after start byte 0xbe
) in pattern match (m//) at /home/admin/jcode.pl line 362.
[Thu Jul 1 23:57:20 2004] test.pl: Malformed UTF-8 character (overflow at 0x302b374a, byte 0xa5, after start byte 0xbe
) in pattern match (m//) at /home/admin/jcode.pl line 362.
[Thu Jul 1 23:57:20 2004] test.pl: Malformed UTF-8 character (overflow at 0x302b374a, byte 0xa5, after start byte 0xbe
) in pattern match (m//) at /home/admin/jcode.pl line 362.
[Thu Jul 1 23:57:20 2004] test.pl: Malformed UTF-8 character (overflow at 0x302b374a, byte 0xa5, after start byte 0xbe
) in pattern match (m//) at /home/admin/jcode.pl line 362.
[Thu Jul 1 23:57:20 2004] test.pl: Malformed UTF-8 character (overflow at 0x302b374a, byte 0xa5, after start byte 0xbe
) in pattern match (m//) at /home/admin/jcode.pl line 362.
[Thu Jul 1 23:57:20 2004] test.pl: Malformed UTF-8 character (overflow at 0x302b374a, byte 0xa5, after start byte 0xbe
) in pattern match (m//) at /home/admin/jcode.pl line 362.

何かこのエラーに関して心当たりがおありの方いらっしゃい
ましたらご教授ください。
661nobodyさん:04/07/02 00:03 ID:???
>>648さん
いいと思いますけど、1点、
<input type="hidden" name="file_name" value="question1.dat">
の部分はセキュリティ上、良くないです。
このhiddenのタグは使わないような仕様にしましょう。
何で良くないかここで説明してもいいんだけど、これで逮捕された人がいたからな…。
662nobodyさん:04/07/02 00:06 ID:???
>>660
jcode.plがUTF8に対応してないんじゃないの?
663nobodyさん:04/07/02 00:08 ID:???
>>660
>>662も書いてるけど、
「jcode.pl Jcode.pm UTF-8」でググってみれ。
664648:04/07/02 00:13 ID:???
セキュリティ上良くないのはわかりますが
うまく回避する方法が思い浮かびません。
今回の場合はたいして問題ないですよね?
665nobodyさん:04/07/02 00:26 ID:???
うーん。詳しく調べてないんで、なんともいえないけど。
datファイルをopenするとき、ちゃんとパスのチェックしてる?
..が含まれていたり、や/から始まる場合はエラーにしないとだめだよ。
どっちにしろ、下のページは一通り読んでおいたほうがいいよ。
http://www.ipa.go.jp/security/awareness/vendor/programming/a00.html
666nobodyさん:04/07/02 00:49 ID:???
>>664
( ゚д゚)あの板でやってたこのクイズ作ってたのはお前かよっ!
どこが問題ないってよ。
http://www.tcn.ne.jp/~majima/dog/quiz/question4.datにアクセスしたら
答え全部わかっちまってるだろうが。

そもそもなんで問題を書いたファイルをhiddenで渡す必要があるんだ?
667質問:04/07/02 00:58 ID:dBU8jv45
perl のスクリプト中でディレクトリを作成したら、パーミッションが変になり、削除できません。

ユーザーは www、グループも www、そしてパーミッションが301(-wx --- --t)になってます。
mvでリネームは出来ます。さらに cd で中に入ることは出来ますが、ls しても何も見えません。

そのサーバでは、CGI(Perl)、telnet、ftpが使用できますが、私はスーパーユーザーではありません。
rmdirをする簡単なPerlスクリプトを書いたり、rm -f -d directryとやってもダメでした。

分かる方が居たら、教えてください。・゚・(ノД`)・゚・。
668nobodyさん:04/07/02 01:07 ID:???
stickyビットが立ったんだな。で、ログインユーザとWEBサーバの実行ユーザが違う、と。
CGIでchmod(0777)かな?ってやって、その後、telnetで入って削除すればいいよ。
669nobodyさん:04/07/02 01:11 ID:???
>>662-663
ご返答有難うございます。
UTFで指定しているところはないのですが、何かの
文字がUTFと認識させてしまっているという解釈で
宜しいのでしょうか。
670648:04/07/02 01:12 ID:???
>>665
貴重な情報ありがとう。
openするときに..とかが含まれてたらエラーにしました。
>>666
とりあえずそこ直します。
671667:04/07/02 01:19 ID:dBU8jv45
>>668
削除できました。

rmやrmdirじゃなくて、一旦 chmod するのは盲点でした。
即答&的確な指示、ありがとうございました。本当に助かりました。・゚・(ノД`)・゚・。
672nobodyさん:04/07/02 01:21 ID:???
>>670
いや、エラーにするとかじゃなくてデータファイル名はスクリプトに直で書けよ。
他にも設計やコーディングの誤りがありそうな予感・・・

↓ここで添削してもらえ。
自作CGIを評価するスレ
http://pc5.2ch.net/test/read.cgi/php/1049514428/
673648:04/07/02 01:28 ID:???
>>672
ありがとう。
複数の問題ファイルをランダムに選んでるので
ファイル名を直でかくのは無理だと思っています。
とりあえず添削してもらってきます。
674nobodyさん:04/07/02 01:37 ID:???
@questions = ("q1.dat","q2.dat","q3.dat");
って書いておいて、
<input type=hidden name=question value=0>
ってやればいい。valueが添え字ね。
675nobodyさん:04/07/02 11:08 ID:???
print <<"EOF";などでHTML表示する場合の質問です。
HTMLのインデントを揃えたいと思っているのですが、

print <<"EOF";
<HTML><HEAD></HEAD><BODY>
EOF

こう書くと、<BODY>とEOFの間に改行コードがあるために、続けてHTMLを出力すると、

<HTML><HEAD></HEAD><BODY>
</BODY></HTML>

のようになってしまいます。
print <<"EOF";を使っても、一番最後の改行コードを含めないようにする書き方はあるのでしょうか?
676nobodyさん:04/07/02 11:46 ID:???
print "<HTML><HEAD></HEAD><BODY>";

これじゃダメなん?
""の中で改行できるし、"自身が存在するならqq使うかエスケープすりゃいい。
677nobodyさん:04/07/02 11:46 ID:???
>>675
そもそもはじめから print "<HTML><HEAD></HEAD><BODY>"; とするか、
適当に変数に入れてお尻の1文字削るのが普通だと思われる。

どっちも嫌なら

print @{[<<"EOF" =~ /(.*).$/s]};
<HEML><HEAD></HEAD><BODY>
EOF

とかってのも可能だがオススメしません。
678nobodyさん:04/07/02 12:48 ID:???
eval関数って使い方によっては危ないみたいですけど、こういう使い方でも危険ですか?

(test.txtの中身)
あいうえお
%{$obj->{form}}

(hoge.cgiの中身)
use Hoge2;
read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'};
my &obj = Hoge2->new($buffer);

open(FH,"test.txt")
while( <FH> ){
if( $_ !~ /\$/ ){ print;
}else{
print eval $_; }
}
close(FH);

(Hoge2.pmの中身)
sub new{
my $self = shift;
@a = split/&/,shift;
foreach( @a ){
(my $a , my $b ) = split/=/;
$form{$a} = $b;
}
bless,{form => {%form}},$self;
}
1;
679黒死犬 ◆EgxBlf8nvc :04/07/02 13:26 ID:???
test.txt が常にあなたの管理下にあって、
他の人が変更不可能な状況ならば問題ナッシング
680678:04/07/02 13:33 ID:???
>>679
ありがとうございます!txtファイルの管理には気をつけます。

print eval $_;

の部分でもしも%formの中にPERLの命令文が入っていた場合とかに実行されちゃうのか
不安でしたが、↑では変数展開されるだけで終わるみたいですね。
展開された内容を再びevalにかけさえしなければ安全ってことですね。

ありがとうございました。
681nobodyさん:04/07/02 14:25 ID:???
>>678
print eval(eval $_);
としなければセキュリティホールにはならないと思う。
682nobodyさん:04/07/02 14:33 ID:???
>>678
見た感じCGIっぽいのでもしそうならXSSには注意しろよ。
683678:04/07/02 14:43 ID:???
>>681
ありがとうございます。

>>682
掲示板ではなく注文システムのCGIなので、実行者に跳ね返るだけのことなのであまり気にしてませんが、
一応
$a =~ s/[><";&\[\]\{\}]//g;
$b =~ s/[><";&\[\]\{\}]//g;
としてから%formに入れてます。

一応わかる範囲でタグとか入れて見ましたが、とりあえず問題ありませんでした。
もし、↑のでは不足していたら教えて頂けると幸いです。
684nobodyさん:04/07/02 14:57 ID:???
>>683
サイニタイジング自体は開いてか受け取ったデータをどこで使うかによって変わってくる。

HTMLなら<,>,&を置換すれば良い。要は、今から処理を行う部分で入ってこられたら困る文字、
特殊文字を消すか、置換するか。

まあPerlは比較的セキュリティ面はしっかりしてるから、上で言ってたようにevalとか
その他一部の関数の使い方に気を付ければよい。

わかってると思うけど、掲示板系のオウム返しプログラムでXSSを軽視していると、
ウイルスが埋めこまれて、利用者が被害をうける事になるから気をつけてね。
685nobodyさん:04/07/02 14:58 ID:???
>>684
>サイニタイジング自体は開いてか受け取ったデータをどこで使うかによって変わってくる。

サニタイジング自体は相手から受け取ったデータを

の間違い。ごめん。
686678:04/07/02 15:16 ID:???
>>684-685

今XSSについて再度記事をよんでますが、掲示板以外でもスクリプトになり得るタグは削除しなくちゃいけませんね。
うちのサイトでタグをちゃんと消していないと、第三者がうちを使っていたずらしちゃいますもんね。
とりあえず、セキュリティホールのなくせるよう頑張ります。ありがとうございました。
687nobodyさん:04/07/02 15:28 ID:???
>>686
俺は必要のない記号は全て削除してる。
=~|\/;:+][{}()`'"<>&%#,
っていうか
*-@.
以外は全部削除しちゃいなよ。注文プログラムなら上の四つがあれば問題ないでしょ?

掲示板なら実態参照すればいいし。
688nobodyさん:04/07/02 15:36 ID:???
実際XSS対策していないサイトってどれくらいあるのかな?
基本的にタグだけでも実態参照にしてるサイトならあまり大きな問題はないと思うけど、
対策を何もしていないとこ見てみたい。

http://www.atmarkit.co.jp/fsecurity/special/31xss/xss01.html
ここなんかXSSについてある程度詳しく書いてるけど、ここが言うには
「XSS対策してないサイトが多すぎる」だってさ。
ほんとにそうなんかな?
689nobodyさん:04/07/02 16:26 ID:???
配布されてるcgiではXSS対策してないのはあんまり見かけなくなったね。
あとはSQLインジェクションはヤバイ。まじでヤバイよ。
まずdeleteできちゃう。もう1レコードなんてもんじゃない。テーブルごと。
何しろ無制限。スゲェ!なんか制限とかないの。
しかも他のテーブルも消せちゃう。ヤバイよ、真っ白だよ。
だって普通は削除できないじゃん。だって削除されたら困るじゃん。
訴えられたら困るっしょ。
だからそのCGIはロールバックできる。話のわかるヤツだ。
けど普通のCGIはヤバイ。そんなの気にしない。消えるだけ。

とにかく貴様ら、SQLインジェクションのヤバさをもっと知るべきだと思います。
そんなヤバい仕事をしてる貴様らとか超偉い。もっとがんばれ、超がんばれ。
690nobodyさん:04/07/02 16:56 ID:???
formでのhiddenが駄目って書いてる人がいるけどhtmlで同じタグ作ってPOSTとかされるからっていう解釈でいいですか?
私はCGI側でリファラーを一致してるかチェックしてるんですがこれでもまだセキュリティー的にあぶないんでしょうか?
691nobodyさん:04/07/02 17:02 ID:???
>>690
当然あぶないに決まってる
692nobodyさん:04/07/02 17:10 ID:???
>>691
何故ですか?具体的にお願いします。
693nobodyさん:04/07/02 17:11 ID:???
>>690
hiddenそのものが駄目なわけではないので要は使い方の
問題だと思うのだが。hiddenだろうがなんだろうが、やろうと
思えばclientからは何でも送れるので過度に信用するなっ
てこった。

リファラーもclientの自己申告なんで騙され放題。そんなも
のでまともなチェックにはならない。足切りぐらいにはなる
けどな。

694nobodyさん:04/07/02 17:46 ID:???
>>689
そうだね。データベース操作するcgiなんかではサニタイジングを念入りにやらなきゃね。

695nobodyさん:04/07/02 18:02 ID:???
>>689
DBIならいきなり渡されたデータを埋め込んだSQL文作って実行じゃなくて
prepare-bind_param-executeにすればめったなことはないと思うんだが
オレの認識は甘いだろうか?
696nobodyさん:04/07/02 18:11 ID:???
>>693
やっぱりそうですか。
私が作ってるスクリプトはhiddenの値を変えられるとかなり危険なので修正してみます。
どこかに参考になる方法とか載ってないでしょうか?
697nobodyさん:04/07/02 18:43 ID:???
そろそろこっちの方がよくないか?

CGI: Common Gateway Interface part 11
http://pc5.2ch.net/test/read.cgi/php/1055597189/
698nobodyさん:04/07/02 19:32 ID:???
>>696
っていうかさ、クエリは常識として毎回中身をチェックしろよ。
多分今の状態ならお前のサイト思いっきりXSSのえじきだよ。

お前の知らないところで、お前のサイトがウイルス配布に使われてるかもよ。
もちろん配布してるのはお前だからお前が逮捕。とりあえず>>688が晒してるサイト程度の
知識は必要だ。

http://www.ipa.go.jp/security/awareness/vendor/software.html
ついでにここも読んどけ。
699nobodyさん:04/07/02 19:37 ID:???
>>697
うむ、XSSにしろSQLインジェクションにしろhiddenパラメータにしろ、
Perl に限定されない CGIセキュリティの話は、
そちらで話すことが望ましい。
700nobodyさん:04/07/02 21:33 ID:???
>>689
全権限はGRANTしないだろ。普通。
701nobodyさん:04/07/02 22:18 ID:???
今はパスワードを入力してもそのチェックをしない
サイバーノーガード戦法の時代ですよ。
702nobodyさん:04/07/03 15:11 ID:???
板違いみたいだったのでこちらで質問させていただきます。

DBにパスワードを書ける方法がうまくいきません。

具体的には、perlスクリプトからuse Pgでconnectする際、
ユーザ名とパスワードで認証をかけたいのですが、
createdb -W で指定したパスワードがどうしてもきかない
ようです。

認証をかけるところが間違っているのではないかと思って
いるのですが、どうしてもやり方がわかりません。

ご教授いただけますと幸いです。
703nobodyさん:04/07/03 17:22 ID:dEpm626a
半角カナを全角カナに変換したいんですけど,下のコードで
うまくいく行と文字化けする行があるのですが,うまく変換する
方法はありますか?

CSVデータはこれです。
http://www.post.japanpost.jp/zipcode/dl/kogaki/lzh/ken_all.lzh

use Jcode;
open IN, "./ken_all.sjis";
while(<IN>){
  my $line = $_;
  chop $line;
  $line = jcode($line)->h2z->euc;
  print "$line\n";
}
704nobodyさん:04/07/03 18:07 ID:???
>>702
お茶呑みながらじっくりと眺めてみる。
http://member.nifty.ne.jp/hippo2000/perltips/Pg.htm

>>703
while(<IN>){
 chomp;
 printf qq|%s\n|, jcode($_, 'sjis')->h2z->euc;
}
705nobodyさん:04/07/03 19:05 ID:???
>>704
お返事有難うございます。

connectでパスワードを入れても入れなくても
認証されちゃうので、DB(もしくはテーブル)作成
時の問題と踏んでいるのですが間違っております
でしょうか。
706703:04/07/03 19:08 ID:???
>>704
うまくいきました。ありがとう。
707nobodyさん:04/07/03 21:19 ID:???
>>705
残念ながらエスパーではありませんので。>>1 嫁。
ということでもっとお茶呑んでください。
708nobodyさん:04/07/03 21:54 ID:MbMdEpi2
>>705
何にも情報が無いので、
とりあえず pg_hba.conf の設定でも見直してみろ、
と言ってみる
709nobodyさん:04/07/03 22:29 ID:nSj0iEMY
$="123456";

のようにして、桁数を調べたいのですが、どのようにすれば良いのでしょうか?
710nobodyさん:04/07/03 22:32 ID:???
Perlの質問以外は受け付けません
711nobodyさん:04/07/03 22:38 ID:???
>>709
$="123456";

のようにして、桁数を調べれば良いと思います。
712709:04/07/03 22:45 ID:nSj0iEMY
$NO="123456";

でした。すいません・・・
713nobodyさん:04/07/03 22:52 ID:???
>>712
length
714nobodyさん:04/07/03 23:36 ID:???
sub 709{

$i=1;
while(1){ if(@_%10<10) $i++) }

return $i+1;

}
715nobodyさん:04/07/03 23:38 ID:???
sub 709{

$i=1;
while(1){
$j=1;
for($j=0; $j<$i; $j++){ $j*=10; }

if(@_%$j<10) $i++) }

return $i+1;

}
716nobodyさん:04/07/03 23:41 ID:???
>>714-715
動きませんが。
まともに書けないなら無理しなさんな。
717nobodyさん:04/07/03 23:51 ID:???
ただ適当に書いただけ。
別に動かそうと思って書いたわけじゃないが
718nobodyさん:04/07/04 00:00 ID:???
>>717 ← こ、この言い訳は苦しすぎるw

>>709
unsigned integerなら>>713でいいんでないの?
719nobodyさん:04/07/04 00:03 ID:???
なんでさ
10のn乗で割っていくってようりょうだぞーってレスのつもりだが
で、10で割り続けてたので単純にpow入れようやっておもい
Perlってpowあったかなーとおもい、自分でn乗だすようにしてーー
って適当にやったから括弧の場所とかほっときぱなしになったわけだが

良い訳とかキモイ
720nobodyさん:04/07/04 00:06 ID:???
ループはダサイ。
int(log($NO)/log10)+1
721719:04/07/04 00:06 ID:???
ってついカーっとなってスマン・・・
たしかにそうとられても仕方ない罠。
722719:04/07/04 00:07 ID:???
>>720
スマンな。Perlは去年少しかじって止めたのでほとんど関数把握してないんよ
723nobodyさん:04/07/04 00:12 ID:???
そんな奴が回答者かよ
724719:04/07/04 00:16 ID:???
j3勉強のついでということで
725nobodyさん:04/07/04 00:26 ID:???
perlだけに下手に自分で10で割ったりしながらループするより
length取ったほうが速そうだな。誰かベンチしてみない?
726nobodyさん:04/07/04 00:49 ID:???
splitで1文字ずつに分解して配列数数える方法もありじゃないか?
727nobodyさん:04/07/04 00:52 ID:???
おそらくそれが一番早いかと
728709:04/07/04 00:54 ID:Udr24Tj0
>>713
lengthで調べてみたら、出来ました。ありがとうございました。

もう一点、お聞きしたいのですが、
特定の文字列と一致した場合だけエラーになるようにしたいのです。

$NO="123456";
$NO2="23";

if ($NO eq /$NO2/g) {
  print "エラーです";
}

こんなふうに書いたのですが、上手くいきません。
サイトをいくつか見ながら書いてみたのですが、原因がわかりません。
すいません、どなたか教えてください。
729nobodyさん:04/07/04 00:54 ID:???
(°д ゚)ハァ?

=~
730nobodyさん:04/07/04 01:35 ID:???
なんか基本から解説してる本を1冊買うことをすすめるよ。
731nobodyさん:04/07/04 01:43 ID:???
>>728
indexで十分だ。
やっぱ本買うよろし。
732709:04/07/04 01:47 ID:Udr24Tj0
本を買おうと思ったのですが、良い本が見つからなくて・・・
HTMLで言う、「とほほのWWW入門」みたいに、
Perl開設の良いサイトなど無いでしょうか?

ここのスレに載っていたページはどうもわかりにくくて・・・
733nobodyさん:04/07/04 01:49 ID:???
今更でスマソだが、漏れなら、
@no = qw(1 2 3 4 5 6);
print $_ = @no."桁\n";
734nobodyさん:04/07/04 02:16 ID:???
ここなんか例が載ってて判りやすいと思うのだが。
http://www.big.or.jp/~mio/ga/pl/plref/pl_ref.htm
735nobodyさん:04/07/04 02:41 ID:???
>>732
> ここのスレに載っていたページはどうもわかりにくくて・・・
だったらなおのこと、本も用意したほうがいいですよ。

>>733
頑張ってください。>>726-727も眺めつつ。
736nobodyさん:04/07/04 03:33 ID:???
>>732
じゃあ「CGI&Perl究極のレシピ350 とほほが教える」でも買ってみたら?
http://www.esbooks.co.jp/books/detail?accd=31095149
Perlの解説本というより目的別のサンプル集みたいなのだから
丸々コピーばかりしないで参考にすればいくらか勉強にはなるだろう。
737nobodyさん:04/07/04 07:41 ID:???
俺も持ってる、トホホ氏の。
何気に役に立つよ
738nobodyさん:04/07/04 10:09 ID:???
>>732
知ってると思うけど
http://tohoho.wakusei.ne.jp/wwwperl.htm
739nobodyさん:04/07/04 13:38 ID:bJ9Q5bUP
初めまして、さっそく質問で申し訳ないのですが、
パスワードの暗号か処理で暗号化を施した場合、
暗号化をログから解除して元パスワードを知ることはやはり不可能でしょうか?

例えば↓
sub encrypt {
local($inpw) = $_[0];
local(@char, $salt, $encrypt);

@char = ('a'..'z', 'A'..'Z', '0'..'9', '.', '/');
srand;
$salt = $char[int(rand(@char))] . $char[int(rand(@char))];
$encrypt = crypt($inpw, $salt) || crypt ($inpw, '$1$' . $salt);
return $encrypt;
}
のようなものからパスワードを探ることは・・・?
740nobodyさん:04/07/04 14:18 ID:???
キーがわかるなら総当りしていけば? 単純に複合は無理でしょ。
741nobodyさん:04/07/04 14:58 ID:???
暗号化前の平文をログって置けばよい。
742nobodyさん:04/07/04 18:07 ID:???
簡単に複合できてしまう暗号なんてオhる
743nobodyさん:04/07/04 18:39 ID:???
ハッシュの使い方が全然わかりません…
$testに環境変数の一部をUserAgent,IPみたいにコンマ区切りで入れたいだけなんですが…

助けてください…
744nobodyさん:04/07/04 18:43 ID:???
>743の質問の意味が全然わかりません…
助けてください…
745nobodyさん:04/07/04 18:44 ID:???
$test= join(',',@ENV{keys %ENV});
7467M. ◆dq7M./4Uw. :04/07/04 18:58 ID:???
>739
それが出来ないから暗号として成り立つわけで。。。
747nobodyさん:04/07/04 20:30 ID:???
2つのファイルのファイル名を入れ替える時ってどうすればいいのかな?
今は
$file1 = 'one.jpg';
$file2 = 'two.jpg';
$temp = 'temp.jpg';
rename $file1,$temp;
rename $file2,$file1;
rename $temp,$file2;
ってやってるけど、いい方法ある?
教えてエロい人!
748nobodyさん:04/07/04 21:22 ID:???
>>747
renameの戻り値は見といたほうがいいと思うよ。

あとはtemp.jpgが固定なのとrenameだと上書きされる
のがちと気になるかな。

私がやるなら多分こんな感じにすると思う。最初のrenameを
linkにしたのは一時ファイル名がすでに使われてるときに上書き
しないため。途中でエラーになった時の処理をどこまで凝るかは
その時によるけどor dieは一番手抜きのパターンね。

$file1 = 'one.jpg';
$file2 = 'two.jpg';
$temp = "temp.jpg.$$";
link $file1,$temp or die;
rename $file2,$file1 or die;
rename $temp,$file2 or die;

749nobodyさん:04/07/04 21:29 ID:???
>>748
ナンダコレ
釣りか?
750nobodyさん:04/07/04 22:07 ID:Sq5R/TGN
プログラム版で板違いといわれてこっちに来ました

全文検索でヒットした奴を
行の真ん中に表示されるようにしたいんですがどうすれば良いんですか?

つまりglobalを検索したとすると、

                      global SchoolNet Director
 we have increased the US publics global awareness
                CanWest global Communications
              help address global warming issues
   California Wood Use Endangers global

↑こういう風に結果を出したいんです。
行全体を出力して、まんなかに検索した語を表示させたいんですが
そもそもどういう方針でやればいいのかさえわかりません。
どうすれば良いんですか?
751nobodyさん:04/07/04 22:38 ID:???
>>750
Webプログラミングか?そうじゃなかったらム板池
752nobodyさん:04/07/04 22:46 ID:???
table タグで位置あわせするとかその手の話のように読めるが、
もしそうだとしたら、単にHTMLの話だから、
プログラミングでも、Webプログラミングでもなく、Web製作板に行くべきだな。
753nobodyさん:04/07/04 23:20 ID:???
>>750
マルチするの早杉。向こうで解答貰ってるぞ。
754nobodyさん:04/07/04 23:53 ID:???
>>751-753

バカは下手にでると際限なく威張りますね
わからないならレスしなくていいよ。
755nobodyさん:04/07/05 00:30 ID:AbFm7153
質問させてください。
windowsで動かしているとき、
perlを動かすときにdos窓のウィンドウタイトルはc:\perl\bin\perl.exeや
コマンドプロントから起動させた場合はc:\winnt\system32\cmd.exeのようになって
いると思うのですがそれを任意の文字に設定したいのです。
色々検索してショートカットから起動すれば変えられるのはわかったのですが
当方、rocket mouseというtoolからウィンドウタイトルを任意の文字にした
ものを起動させるのが目的でして、このtoolの場合、plファイルのショートカット
を指定してもそのショートカットから起動させるのではなく、リンク先を参照して
起動するため、ウィンドウタイトルを変更して起動させることができません。
ここを調べろ、ここは確認したのかなどのご指摘ありましたらよろしくお願いします。
756nobodyさん:04/07/05 00:49 ID:???
>>755
> ここを調べろ、ここは確認したのかなどのご指摘ありましたらよろしくお願いします。
>>1は読んだか?
757nobodyさん:04/07/05 00:59 ID:???
>>755
Perlと何の関係が?
758755:04/07/05 03:14 ID:???
レスありがとうございます。
>>756さんの言うとおりもう一度1を読み返してみます。
>>757
私はてっきりperlスレで質問する内容だと思ったのですが
ご指摘いただいたので違う方向からも再度考えさせてもらいます。
ありがとうございました。
759nobodyさん:04/07/05 04:03 ID:???
プロセスを常駐させるにはどんな関数やモジュールを使えばいいでしょうか?
fork関数を使えば良いですか?
760nobodyさん:04/07/05 06:29 ID:???
皆さんは入力文字列をエスケープする際にどのような処理をしてますか?

自分はこんな感じです
/&/&/
/\"/"/
/\'/?/
/</</
/>/>/
/\s/ /
/\r\n/<br>/
/\r/<br>/
/\n/<br>/

他に
こんな文字も危険、この文字はこれに置換がいい的なアドバイスもOK
761nobodyさん:04/07/05 06:30 ID:???
↑ 消えたので&を&にして書き直しました

/&/&amp;/
/\"/&quot;/
/\'/&#39/
/</&lt;/
/>/&gt;/
/\s/&nbsp;/
/\r\n/<br>/
/\r/<br>/
/\n/<br>/
762nobodyさん:04/07/05 06:48 ID:???
Perlのコーディングの話が少ないな。
763nobodyさん:04/07/05 10:32 ID:???
この板の住人の大半は
1. コーディング以前の箇所で躓いている
2. 自分の抱える問題がコーディングの問題なのかどうかを切り分けできない
3. そもそもコーディングという言葉の意味を知らない
のいずれかだから。
たぶんこのスレも「Perlを使ったCGIに関する質問ならなんでもOK」だと思われてる
764nobodyさん:04/07/05 10:59 ID:???
なるほど、
スレタイ嫁
だけじゃ通じなくなってきたワケだな。
765nobodyさん:04/07/05 15:04 ID:???
どーでもいいけど此処って初心者と中級者しかいないね
766nobodyさん:04/07/05 15:19 ID:???
無意味なレスをつける>>765はスレタイも空気も読めない初心者
767nobodyさん:04/07/05 15:40 ID:???
>>760
s/[\0-\0377]//g;
768nobodyさん:04/07/05 16:48 ID:kgB0NkdW
除算の繰上げってどのようにします?


### 除算の繰上げ
$a = 10;
$b = 3;

$c = $a % $b;
$d = int($a / $b);
if($c){$d++;}


いつもこんな感じですが
なんか、もっさりしてます。
スマートにコーディングしたものですが・・・。
769nobodyさん:04/07/05 18:12 ID:???
$a = 10;
$b = 3;
$d = int(($a + $b - 1) / $b);
770nobodyさん:04/07/05 23:09 ID:???
>>766
空気読めないのお前じゃん。放置しろよ
771nobodyさん:04/07/05 23:29 ID:???
粘着ねぇ・・・
772nobodyさん:04/07/06 00:04 ID:Xk4rbtY7
perlの ImageMagickを使って画像のexif情報を削除して
ファイルサイズを小さくしたいのですが、できません。

ググってみたところ

$image->Strip();

で削除できるという記述をみたのですが、同じようにやっても
画像が表示できなくなります。

どうやればexif情報だけすっぱり消せるかご存知の方は
いらっしゃいませんでしょうか?
773nobodyさん:04/07/06 02:32 ID:???
有効期限が1時間のcookieを焼きたい。
cookieのexpiresに使える形式の時間の取得って、
gmtime time
だと全て数字だから微妙に違うよね。

cookie用に使える形式にするのに自分でルーチンを作ろうかなとか思ってるけど、
既存のモジュールで、こういうメソッドもってるやつないのかな?
774nobodyさん:04/07/06 02:52 ID:???
775nobodyさん:04/07/06 04:13 ID:???
776nobodyさん:04/07/06 04:29 ID:???
>>772
I believe Strip() first showed up in ImageMagick 5.5.7.
777nobodyさん:04/07/06 08:08 ID:???
10/3で出た答えが整数なら真、小数点が付くなら偽を返す条件式を書きたいんですが、
PERLでは引数が整数であるか、少数点つきの数字であるかを判定してくれる関数はないのでしょうか?

778nobodyさん:04/07/06 08:45 ID:???
>>777
馬鹿たれ
779nobodyさん:04/07/06 09:39 ID:???
>>777
10 % 3
780nobodyさん:04/07/06 10:23 ID:???
$answer = 10 / 3;
print "ぎーーーーーーーーーーーーーーーーーーーーーーーっ" if not $answer - int $answer;
781777=773:04/07/06 10:33 ID:???
>>778-779ありがと。
>>774
なんかムダなソースを読みこんで重くしたくないから、自分で作ってみた。
野暮ったいソースだから、見にくいけど、色々突っ込んでくれるとありがたい。
とりあえず2時間後のGMTを計算するサブルーチン。

ifのとこは上から
処理1.何も繰り上がらず2時間だけプラス
処理2.日、曜、時刻だけ繰り上がり
処理3.処理2+月も繰り上がり
処理4.処理3+年も繰り上がり

一応うるう年は4で割り切れるって部分だけは採用してる。100年とか400年とかは
どうせ生きてないから無視した。
782777=773:04/07/06 10:39 ID:???
sub ti{
( my $sec , my $min , my $hour , my $mday , my $mon , my $year , my $wday , my $isdat , my $yday ) = gmtime time;
$year += 1900;
my @wday = qw/Sun Mon Tue Wen Thu Fri Sat Sun/;
my @mon = qw/Jan Feb Mar Apr May Jun Jul Aus Sep Oct Nov Dec Jan/;
my @a = qw/31 28 31 30 31 30 31 31 30 31 30 31/;
if ( !($year % 4) ) { $a[1] += 1 ; }
my @b = qw/00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60/;
my $timer;
if ( $hour < 22 ) {
          $hour += 2;
          $timer = qq|$wday[$wday], $mday-$mon[$mon]-$year $b[$hour]:$b[$min]:$b[$sec] GMT|;
} elsif ( $a[$mon] != $wday ) {
          $hour -= 22;
          $wday += 1;
          $mday += 1;
          $timer = qq|$wday[$wday], $mday-$mon[$mon]-$year $b[$hour]:$b[$min]:$b[$sec] GMT|;
} elsif ( $mon != 11 ) {
          $hour -= 22;
          $wday += 1;
          $mday -= $a[$mon];
          $mon += 1;
          $timer = qq|$wday[$wday], $mday-$mon[$mon]-$year $b[$hour]:$b[$min]:$b[$sec] GMT|;
} else {
          $hour -= 22;
          $wday += 1;
          $mday -= $a[$mon];
          $mon += 1;
          $year += 1;
          $timer = qq|$wday[$wday], $mday-$mon[$mon]-$year $b[$hour]:$b[$min]:$b[$sec] GMT|;
}return $timer;}
783nobodyさん:04/07/06 10:41 ID:???
お前ら今はサイバーノーガードの時代ですよ。
cookieの有効期限はリミットの2030付近にするのがナウイですよ。
784nobodyさん:04/07/06 10:52 ID:???
>>782
いちいち繰り上がり計算しなくても、gmtime(time+7200)でいいような気が...
785777:04/07/06 10:53 ID:???
$mday -= $a[$mon];
のところは
$mday -= $a[$mon] -1;
だった。
786777:04/07/06 10:56 ID:???
>>784
うおーーーーーーーーーーーーーーーーーーーーーーー!?
787nobodyさん:04/07/06 12:22 ID:???
重くしたくないと言って無駄なコードを書くやつは(ry
788nobodyさん:04/07/06 13:40 ID:DU8HZvls
list.txt
abc:123
aiu:456

1.
open(IN, "list.txt");
while (<IN>) { print; }
close(IN);

2.
open(IN, "list.txt");
while (<IN>) {
$tmp = <IN>;
print "$tmp<br>\n";
}
close(IN)


1.だと abc:123 aiu:456 と出力されるのに
2.だと abc:123 としか出力されないのはどうしてでしょうか、、?
789nobodyさん:04/07/06 13:51 ID:???
>>788
aiu:456だけ表示されるというのならわかるんだけどなぁ。abc:123だけ表示される
のはかなり不思議だ。
790nobodyさん:04/07/06 13:51 ID:???
>>788
もう一回勉強して来い
791nobodyさん:04/07/06 13:57 ID:DU8HZvls
>>789
すいません、aiu:456 としか出力されない の間違いでした・・・
792nobodyさん:04/07/06 15:02 ID:DU8HZvls
色々調べたのですが、何が駄目なのか良くわからないのですが、、、

open(IN, "list.txt");
while (<IN>) { 処理 }

データを1行単位で読み込み、データのある行が存在する間は while文で繰り返す
という意味ではないのでしょうか、、、?
793nobodyさん:04/07/06 15:11 ID:???
while (<IN>) { # ここで list.txt の一行目が読み込まれる
$tmp = <IN>; # ここで list.txt の二行目が読み込まれる
print "$tmp<br>\n" # 当然 $tmp の中には二行目しか入っていない
794nobodyさん:04/07/06 15:37 ID:DU8HZvls
そうだったのですか!!
<IN>で取得したものは$_ に代入されるのですね。
本当に助かりました。有難うございます。
795nobodyさん:04/07/06 15:44 ID:???
>>794
# 何だか表現が微妙に気になる…。

1: abc:123
2: aiu:456
3: abc:123
4: aiu:456
5: abc:123

ファイルの中身をこの5行にして、実験してみるのもいいかも。
796nobodyさん:04/07/06 15:49 ID:???
重ね重ね有難うございます。
早速100行くらいにして試しています。
797nobodyさん:04/07/06 18:37 ID:???
$tmp .= $_;
っでねが?
798nobodyさん:04/07/06 19:05 ID:???
>>797
大丈夫か?(w
799nobodyさん:04/07/07 00:38 ID:???
>>798
ループ抜けてからプリント。
800nobodyさん:04/07/07 03:31 ID:???
>>799
何の為だ?
801nobodyさん:04/07/07 03:43 ID:Dj0xztEm
非常に初歩的な質問なのですが、
受け取った変数を自動的に
別ファイルへ渡す処理はどうやってすればいいのでしょうか?
(フォームを使えば変数を渡せるけど、
自動的には不可能ですよね?)

ヒントでもいいので教えてくだせえ
802nobodyさん:04/07/07 05:27 ID:???
>>801
あとはサーバー側のファイルに記録するくらいじゃないだろうか。
phpならその「自動的」ってのに近いと思う。
803nobodyさん:04/07/07 11:11 ID:???
cgiで受け取ったパラメータをハッシュで取り出したいんですが、
use CGI;
$q = CGI->new;
$hash = $q->Vars;
print $hash;
としたら
HASH(0x8158408)と表示されます。
%hash = $q->Vars;
だとeachなどを使ってもキーなどが出てきません。
色々と検索をするのですが、どうして良いものか解からなくなってきたので
どなたか良い方法を教えて下さい。

いちおう、下記のサイトは見たのですが上手く目的のことができませんでした。

簡単なCGI
http://member.nifty.ne.jp/hippo2000/perltips/Cgi.htm#FETCHING_A_LIST_OF_KEYWORDS_FROM
804803:04/07/07 11:20 ID:???
すみません。
自分で色々と勘違いをしていました。
自己解決しました。
805nobodyさん:04/07/07 12:12 ID:lnfuZW7X
ある関数の中で require でファイルを取り込んでから
その関数を抜けたときって
require したファイルの内容は有効なんでしょうか?
806nobodyさん:04/07/07 12:37 ID:???
>>805
有効。
何故試してみない?
807nobodyさん:04/07/07 15:17 ID:???
>>798
頭大丈夫か?
808nobodyさん:04/07/07 16:04 ID:???
>>807
797は明らかに間違ってるだろ?バカか?
809nobodyさん:04/07/07 16:32 ID:???
list.txt
1: abc:123
2: aiu:456
3: abc:123
4: aiu:456
5: abc:123


open(IN, "list.txt");
while (<IN>) {
$tmp .= $_;
}
print "$tmp\n";
810nobodyさん:04/07/07 16:44 ID:???
>>808
痛いからもういいよ
811nobodyさん:04/07/07 16:46 ID:???
>>809

open(IN, "list.txt");
while ($tmp = <IN>) {
print "$tmp<br>\n";
}
close(IN)

暗黙の$_使うか明示的に一時変数$tmpを使うか、だけの違いだろ。

>>808
間違ってるよね
812nobodyさん:04/07/07 16:52 ID:???
>>811
馴れ合うな、キモイ
お前は解答さえしてればいんだよカス
813nobodyさん:04/07/07 17:04 ID:???
なんか俺の質問のせいで荒れ気味ですか!?
814nobodyさん:04/07/07 17:42 ID:???
そうです
815801:04/07/07 17:54 ID:Dj0xztEm
まじっすか!?
この方法、他にないんでしょうか?
816nobodyさん:04/07/07 18:03 ID:???
>>815
質問が意味不明だから回答が得られないんだよ
817nobodyさん:04/07/07 18:12 ID:???
うん、意味不明
818801:04/07/07 18:17 ID:Dj0xztEm
要約すると、フォームでボタンをクリックして
変数を送る部分を、
クリックしなくても変数を送れるようにしたいんです。
意味分かりますかね?perlの超町長初心者なんで勘弁してください。
どうかよろしこです
819nobodyさん:04/07/07 18:36 ID:???
>>818
perlの問題じゃないです。
要は【submit】ボタンを押さなくても、submitされるようにしたいって事?
JavaScriptとかで勝手にクエリ送るとかか?
やっぱ、perl関係ないです。
820nobodyさん:04/07/07 18:37 ID:???
超町長初心者なら尚更、要約なんかしないで、
ちゃんと持ってるもの全部吐き出してください。
821黒死犬 ◆EgxBlf8nvc :04/07/07 18:39 ID:???
<form action="unko.cfm" name="send">
<input type="hidden" name="Name" value="Value">
</form>
<script language="PerlScript">
$window->document->all->forms->send->submit();
</script>

これで出来んじゃないか(テストしてない)
てか板違い
822nobodyさん:04/07/07 18:42 ID:???
>>818
ユーザ側の視点だと「自動的」「クリックしなくても」で済むんだろうけど、
プログラムにとっては「ある条件が満たされたとき」じゃない?
その「ある条件」は、あなたしか知らないわけですよ。

# で、JavaScriptで何かしらのイベント拾うんだろーけど。
823nobodyさん:04/07/07 19:48 ID:???
>>818
フォームフィールドへの記入が終わる前に勝手に自動的に
CGIに送信してしまうトンデモscriptでも作るのか?
824nobodyさん:04/07/07 20:13 ID:???
>>810
・・・何故お前が皆に叩かれてるのか未だに分かってないのか???
下の二つを実行してみなさい。そして首吊ってください。
# 1
while (<IN>) {
$tmp = $_;
print "$tmp\n";
}
# 2
while (<IN>) {
$tmp .= $_;
print "$tmp\n";
}
825nobodyさん:04/07/07 20:39 ID:???
文字列の配列を全部トリミングしたいんだけど

@d = ( " abc ", " bcd ", " cde " );
for($i=0;$i<@d;$i++){ $d[$i] =~ s/^\s*(.*)\s*$/$1/; }

これをもうちょっとスマートに書いてみたいですが
どしたらいい? for文ははずせないのかな
826黒死犬 ◆EgxBlf8nvc :04/07/07 20:45 ID:???
grep(s/^\s*(.*)\s*$/$1/, @d);
827nobodyさん:04/07/07 20:51 ID:???
>>826
(゚∀゚)サンクスコ!
grepって痴漢も使っていいんだ。勉強になりました。
828nobodyさん:04/07/07 21:40 ID:???
>>824
何で俺にレスしてんの?
しかもみんなって・・・
日本語理解してるか?
ついでいっとくと俺は質問者でも解答者でもない。愉快な煽り厨
829nobodyさん:04/07/07 21:40 ID:???
>>824
お前大丈夫か?
どこが叩かれてるんだ?>>810は・・・
レス一つもないじゃん。
まさか勝手に前の人と同じと認定してるとか?
830nobodyさん:04/07/07 21:45 ID:???
>>824
>>810氏は誰にも叩かれてないように思えるが・・・
俺のログがおかしいのかな?再取得してみるよ
831nobodyさん:04/07/07 21:46 ID:???
824は
>>797=>>807=>>810と認定したんだろう。
832nobodyさん:04/07/07 21:59 ID:???
Perlでセッション関数って使えないのでしょうか?
ググっても使用例が見つからなくて困っています。
833nobodyさん:04/07/07 22:09 ID:???
はぁ?
もっとググれ
834nobodyさん:04/07/07 23:02 ID:???
835nobodyさん:04/07/07 23:07 ID:???
836nobodyさん:04/07/07 23:09 ID:???
>>832
Perlはね、PHPみたいになんでも関数が揃ってはいないのですよ。
モジュールを使うか自分で書くのです。
837nobodyさん:04/07/08 00:41 ID:???
まあ use CGI::Session かな
838nobodyさん:04/07/08 03:00 ID:???
>>826
<q cite="http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlstyle.html">
戻り値をただ単に捨ててしまうような void 文脈で、grep()やmap()、
`backticks` (訳注: `ls`のようにバッククォートで括った実行文のこと)
を使うことは避けましょう。そういった関数はすべて戻り値を持って
いるのですから、それを使うべきです。戻り値に用がないのであれば、
代わりにforeach()を使ったループか system()関数を使いましょう。
</q>

>>825
s/^\s+//, s/\s+\z// for @d;
839nobodyさん:04/07/08 03:04 ID:LQirb/WJ
今日始めてperl触った初心者なのですが
windowsで他のサーバのディレクトリを
ネットワークドライブに割り当て
その中のファイルに対して
-e を実行したらエラーしか返ってきません。
自分のサーバ内なら正常にファイルを検知できたのですが
ネットワークドライブはファイルの検査ができないのでしょうか?

$Path="d:/data/"
$Data="test.dat"

if(-e "$Path$Data")
840nobodyさん:04/07/08 03:04 ID:o03xV6ak
読み込んだファイルの中で文字列<HOGE>と一致する(次の)行を検出したいのですが

do $line = <FILE> until (($line eq "<HOGE>") || (eof FILE));

だと$line eq "<HOGE>"がいつまでも真になりません。
$line =~ /<HOGE>/だと真になってくれますが、「含まれる行」ではなく「一致する」行を検出したいのです。
上のやり方だとなぜ出来ないのでしょうか?
841nobodyさん:04/07/08 03:34 ID:???
>>840
do { chomp($line = <FILE>) } until $line eq "<HOGE>" || eof FILE;

do { $line = <FILE> } until $line eq "<HOGE>\n" || eof FILE;
842nobodyさん:04/07/08 03:38 ID:???
アンカー使えばいいじゃん。
$line =~ /^<HOGE>$/
843840:04/07/08 04:02 ID:???
>>841-842
回答ありがとうございます。しかしそれでも解決しませんでした・・・

がその後自己解決しました。
アップロード時の文字コード変換が原因で認識しなかったようです。
# 最近HDが吹っ飛んでOSアプリすべてを再インストールしたために、FFFTPの転送設定が正しくなされてませんでした
<FILE>をアスキーモード転送でアップしたところ正しい挙動になりました。
844nobodyさん:04/07/08 08:07 ID:???
>>825
だれも指摘してないが、その置換では末尾の空白は
とれないよ。先に.*の方に食われちゃうので。838は
黙ってさりげなく直しちゃってるけどな(笑)
845nobodyさん:04/07/08 09:16 ID:???
>>843
それは改行コード
846nobodyさん:04/07/08 11:32 ID:lii7HGr3
掲示板を作りました。
PCやドコモの携帯では普通に書き込めていましたが、auで試したら、
書き込んだ内容がURLエンコードされたまま書き込まれてしまいました。
なぜでしょうか。

書き込まれた内容 : %92x%82%ea%82%c4%83X%83%7d%83%93

デコード処理部分
sub getparam{
my($QUERY_DATA,@pairs,$pair,$key,$value,%FORM);

if($ENV{ 'REQUEST_METHOD' } eq "POST"){
read(STDIN, $QUERY_DATA, $ENV{'CONTENT_LENGTH'});
}

@pairs = split(/&/,$QUERY_DATA);

foreach $pair (@pairs){
($key,$value) = split(/=/,$pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/"/"/g;
$value =~ s/&/&/g;
$value =~ s/</</g;
$value =~ s/>/>/g;
$value =~ s/\r\n|\r|\n//g;
$value =~ s/\,/、/g;
$value =~ s/\t//g;
$FORM{$key} = $value;
}
return(%FORM);
}
847nobodyさん:04/07/08 11:38 ID:???
>>846
君がURLエンコードされたものをデコードしてないから。
素直にCGIモジュール使った方がいいと思うよ。
848847:04/07/08 11:39 ID:???
ごめん見落としてた。吊ってくる。
849nobodyさん:04/07/08 13:09 ID:???
>>846
自分のスクリプトから欠陥を見つけられないならauの方の糞さを疑ったらどうだ?
三菱から欠陥を見つけられないなら乗り手の方の糞さを疑ったらどうだ?
850nobodyさん:04/07/08 13:26 ID:???
とりあえず加工する前の生の入力($QUERY_DATA)をファイルか何かに書き出して
よく眺めてみるのがいいかもね。
851nobodyさん:04/07/08 13:29 ID:???
GDでグラフを描こうと思ったけど
横軸が等間隔じゃないデータは
扱いにくそうだな

ほかにグラフ描くいいライブラリないかな
852nobodyさん:04/07/08 14:03 ID:???
853nobodyさん:04/07/08 14:09 ID:???
各モジュールの長所・短所とかの話であれば
http://pc5.2ch.net/test/read.cgi/php/997829243/
の方がベターと思われる
854nobodyさん:04/07/08 16:34 ID:???
855nobodyさん:04/07/08 17:51 ID:fxJBz/QH
とりあえずカウントするだけのアクセスカウンタを作ろうと思ったのですが
 #!/usr/local/bin/perl -Tw
 use strict;
 
 my $data = './data.dat';
 open COUNTER, "+<", $data or die "$data:$!";
 my $count = <COUNTER>;
 $count += 1;
 seek COUNTER, 0, 0;
 print COUNTER $count, "\n";
 close COUNTER;
 #html排出
 print "$count";

 exit;
なんどやっても、おかしいと思うところやタイプミスを直しても動きません(Internal Server Error)
どこが間違っているのでしょうか?勉強後初プログラミングなもんで…
ご教授よろしくお願いしますm(_ _)m
856nobodyさん:04/07/08 18:01 ID:???
すいません。書き忘れました。
cgiのパーミッションは755
datのパーミッションは777
です。よろしくお願いします
857nobodyさん:04/07/08 18:02 ID:???
>>855
-Tw
858nobodyさん:04/07/08 18:11 ID:???
>>857
速レスありがとうございます。
-Twが間違っているのですか
あの、よろしかったらどのようにすればよいのか教えていただけないでしょうか?とりあえず抜いてみたのですが、事態は変わらず…
859nobodyさん:04/07/08 18:12 ID:???
>>855
ヘッダ
860nobodyさん:04/07/08 18:13 ID:???
>>855
ていうかエラーログ読めよ。まずはそれからだろ。
861nobodyさん:04/07/08 19:59 ID:???
>>855
ヘッダ書け。

#!/usr/local/bin/perl
use strict;

my $data = './data.dat';
open COUNTER, "+<", $data or die "$data:$!";
my $count = <COUNTER>;
$count += 1;
seek COUNTER, 0, 0;
print COUNTER $count, "\n";
close COUNTER;
#html排出
print "Content-type: text/html;";
print "$count";

良心で書いてやったぞ(藁
862nobodyさん:04/07/08 20:14 ID:???
>>855
まともにエラーも確認できないようじゃ、大変だよ。
見られない環境なら↓こんなんもあるし。。。
http://www.kent-web.com/utility/index.html
863nobodyさん:04/07/08 20:21 ID:UcZ/C4OX
>>646

$testdat = 'c:/Program Files/Apache Group/Apache2/cgi-bin/test.dat

open IN, $testdat or die "$!\n";
while(<IN>){
chomp;
$record{(split(/<>/,$_))[0]} = $_;
}
print (((sort keys %record))[-1]);

でテストすると、syntax error at test1.cgi line 8, near "open "
Execution of test1.cgi aborted due to compilation errors.
が、出てしまいます、これはどこを縦・・・じゃなくて

どうやって原因をつきとめていったらいいのでしょうか?
864名無しさん@Linuxザウルス:04/07/08 20:29 ID:3Hvq7uli
縦読みが出来るエラーメツセージをはく処理系が
あったら最初は楽しいかもしれんが、ウダイだろ
865863:04/07/08 20:34 ID:7oRlGTHB
このエラーはWindows2000のコマンドプロンプトで
perl -cw test1.cgi
で出てきたものです。
866名無しさん@Linuxザウルス:04/07/08 20:37 ID:3Hvq7uli
フオームに文をいれてやると、縦読みにして
かえしてくれるやつを作るとしたら

まず何をすればいいのでしょうか?
867863:04/07/08 20:44 ID:7oRlGTHB
いまもコードをにらんでいますが
near "open " のところがわかりません。

近いっていったいなにが?って感じです。
868nobodyさん:04/07/08 20:49 ID:???
open前の行が…(ry
869nobodyさん:04/07/08 20:51 ID:???
openの近くが…(ry
870nobodyさん:04/07/08 21:05 ID:???
お邪魔します。
よくWebサイトに『〜〜100の質問』ってありますよね。
あれを簡単にHTMLで出力できるようなCGIを作ってるのですが
うまくうごかなかったので、質問させてください。

処理の流れは以下の通りです。
1.テキストファイルから質問を読み込む
2.質問を一度表示させる。その際、1つの質問に対して1つのテキストエリアをつける(sub quesView)
3.テキストエリアに回答をいれ、一番最後に出力というボタンをおすことにより、HTML出力のサブルーチンに移動(sub sub regist)
4.HTML出力

質問を読み込んで出力できているのですが
HTML出力するときのサブルーチンにうまく移行できていないみたいなのですが
どうあがいてもうまくいきません。
よかったらご教授いただけませんでしょうか?

【サンプル】
ttp://cgi.www5f.biglobe.ne.jp/~c-fellow/cgi-bin/04_test/100/100q.cgi

【ソース】
ttp://www5f.biglobe.ne.jp/~c-fellow/cgi-bin/04_test/100/100q.zip

ソースはコピペだらけで、汚いと思いますが、宜しくお願いします。
871名無しさん@Linuxザウルス:04/07/08 21:17 ID:???
>>868
開店前の銀行がどうしたんだ?
872nobodyさん:04/07/08 21:19 ID:???
>>868
>>869

openの前の行も、近くにも変な追記はしてないですし
さっぱりわかりません。

873nobodyさん:04/07/08 22:18 ID:???
>>872
自分のソースを読み直してくれ。
$testdat = 'c:/Program Files/Apache Group/Apache2/cgi-bin/test.dat
これはどう見てもopenの前にあるよな?
874nobodyさん:04/07/08 22:19 ID:???
$_=undef unless($_);

なぜ、このような文法が許されるのですか?
unless($_) { $_=undef; } と書かないのはなぜですか?
875nobodyさん:04/07/08 22:20 ID:???
>>874
Larry Wall が許したから
876nobodyさん:04/07/08 22:22 ID:???
> なぜ、このような文法が許されるのですか?
そのようにPerl上で定義されてるから。
> unless($_) { $_=undef; } と書かないのはなぜですか?
ここではunless($_)より$_を解放する処理が有るということの方が重要だから。
877nobodyさん:04/07/08 22:51 ID:???
(´-`).。oO( KヨNT の中の人かなぁ。。。)
878874:04/07/08 22:58 ID:???
>>876
強調のための倒置法みたいなもんすね。
「帰れ! やる気無いなら!」 みたいな。
879nobodyさん:04/07/08 23:00 ID:???
>>870
sub Form_Input {
 my($buffer,@pairs,$value,$name);
 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;
  $input{$name}=$value;
 }
}
を最後の行にぶち込み、%Form_Input(); を条件分岐(# メイン処理 つーところ)の前で呼びだし、$mode を $input{'mode'} に変更し、
サブルーチン、registを、
sub regist {
 &header;
 print "$buffer";
 &footer;
 exit;
}

 とすればとりあえず動く。長くてスマソ。
880nobodyさん:04/07/09 01:28 ID:???
(´-`).。oO(>>863はさすがにもうわかっただろうな・・・)
881nobodyさん:04/07/09 01:31 ID:???
(´-`).。oO(だといいけどね…
882nobodyさん:04/07/09 02:03 ID:???
>>863 = >>880と見た。
883nobodyさん:04/07/09 02:16 ID:???
おもしろいこと言う人だw
884nobodyさん:04/07/09 02:19 ID:???
まぁアレだ、回答が得られずにスレに張り付いてリロード繰り返してる>>863 = >>880 = >>883必死杉
885nobodyさん:04/07/09 02:24 ID:???
>>884
もしかしてお前が煽って回答を引き出そうとしている>>863か?
886nobodyさん:04/07/09 02:27 ID:???
>>884
俺も>>882見た瞬間に
「なんでそうつなげるんだろ?面白い人だなぁ」
と思ったんだけどな。
俺も必死杉な質問者扱いされる仕様なのか…。

# このスレ、どうなっとるんだ?

>>866
% vi ~/tateyomi.pl
887870:04/07/09 08:45 ID:???
>>879
レスありがとうございます。
ご指摘があった箇所を書き換えたところ、一応動きました。
が、$bufferが書き出されません・・・。

sub Form_Input の処理というのは
Formデータを読み込んで$bufferにいれ
それを&で切り分けたものを@pairsにいれる。
@pairsに入れたものを=でさらに分けて、$nameと$valueにいれる。
$valueに対してデコード処理。
で合ってますか?
これならば、$bufferは生データが表示されるはずですよね・・・。
(´ヘ`;) う〜ん・・・

もうちょっと頑張ってみます。
888nobodyさん:04/07/09 11:39 ID:???
>>879
%Form_Input();じゃなくて&Form_Input();だよな。キー隣だもんな。
>>870
ソース見れないので、間違ってたらスマソ。
 print $input{'1'} ;
にするとどうなる?
889863:04/07/09 11:42 ID:???
>>873
朝起きて、もう一度みたら気が付いた・・・・。

>>880以降の人たち
漏れには0時過ぎに起きて2ちゃんやれるほどの元気はないぞ・・・いいな若いって。
890nobodyさん:04/07/09 11:44 ID:6LTGfdJz
データとフォームから得たデータの重複チェックがしたいのですが

if ($aaa_tel eq $bbbtel){print "同じ電話番号が存在します。";}

こうしたソースで、$aaatelが0123-45-6789の場合、$bbbtelの中が
0123456789や、01-2345-6789、012-345-6789、012-345-6789
0123-45-6789、01-2345-6789なども
同じ番号と判定して警告を出すためには、どのように書き直した方が
いいのでしょうか?

891nobodyさん:04/07/09 11:55 ID:???
>>890
比較する前に、比較できるようフォーマットを揃える
892nobodyさん:04/07/09 12:04 ID:???
両方の文字列からハイフンを除去し、マルチバイト文字をASCIIに揃え、
とかやった上で比較するわけだな。
一般には「正規化」と呼ばれる。
893890:04/07/09 12:05 ID:6LTGfdJz
正規表現を使って判定するとしたら、どんな記述になりますかね?
894nobodyさん:04/07/09 12:11 ID:???
俺と性器表現しようよ
895nobodyさん:04/07/09 12:13 ID:???
s/>>894//
896nobodyさん:04/07/09 12:36 ID:???
>>893
sとm、どっちがお好き?
897nobodyさん:04/07/09 13:37 ID:???
>>890
1. 双方とも全角→半角する。Encode でも Jcode でも。
2. 双方とも tr/0-9//d; にする。
3. 双方を比較する。
4. おしまい。
898nobodyさん:04/07/09 13:59 ID:???
>>896
ワロタw
しかも質問が変ではない。
899nobodyさん:04/07/09 17:20 ID:???
ハッシュtableの中身をソーティングし、その値を出力するプログラムです。

%table = ('A' => '5',
'B' => '10',
'C' => '8',
'D' => '13');

sub number {
if ( $table{$a} > $table{$b} ) {
return 1;
}
elsif ( $table{$a} == $table{$b} ) {
return 0;
}
elsif ( $table{$a} < $table{$b}) {
return -1;
}
}

foreach $KEY (sort number values %table){
print "It's $KEY \n";
}

上記のプログラムを実行したところ、tableの値がソーティングされておらず、しかもデバッグにより、サブルーチン内の$aと$bに値が入っていないことが解りました。時分でも減員を調べたのですが解らなかったので、教えて頂けませんでしょうか?
900nobodyさん:04/07/09 17:51 ID:???
>>899
foreach( sort{$table{$a} <=> $table{$b}}keys %table){
print "It's $_ \n";
}

何してるんだか、どっから説明すればいいんだか、
なんで何の為にこねくり回してるんだか
901nobodyさん:04/07/09 18:03 ID:???
      |       /ヾ..                  | |
      |          |         __,-'ニニニヽ .  |  |
..       |        `、ヽ        ヾニ二ン"  /  |
        |         ヽ\             /  |
AA略

        誤字は誤字であると見抜ける人でないと
        (Perlのコーディングは)難しい
902nobodyさん:04/07/09 18:55 ID:???
ネット上のファイル(httpからはじまるようなもの)をopenで開くような感じにする方法ありますか?
cgiを通してネット上のファイルを書き換えてレンダリング、というのをやりたいんですが、
同じサーバーのものしか扱えなくて困ってます。
903nobodyさん:04/07/09 19:40 ID:???
そんなんできたら大変だろ・・・・
904nobodyさん:04/07/09 19:40 ID:???
>>902
それができたら世の中どうなるか考えてみろ
905nobodyさん:04/07/09 20:00 ID:???
>904
どういうものを想像してるのかわかんないんですが、
ファイルを書き換えて保存するわけじゃなくて、
ファイルを読み込んで、書き換えたものをレンダリング、です。
電波ニュースとかご存じないでしょうか。あんな感じなんですが。
906nobodyさん:04/07/09 20:18 ID:???
>>905
普通にSocketを使ってよむんならかのう。 PHPならfopenで読めるそうな
907nobodyさん:04/07/09 20:43 ID:???
>>905
相手がhttpならLWP使って読めばいいんじゃねーの?
変数なりなんなりに中身入っちまえば後は煮るなり
焼くなり好き勝手すりゃいいわけで。
908nobodyさん:04/07/09 21:08 ID:???
phpはfopenでurl開けるから楽。関数もむちゃくちゃおおい
でも、素人はperl使っててください、お願いだからPHP使わないでね^^
909nobodyさん:04/07/09 22:21 ID:???
>>897
tr/0-9//d;ってのは、変換する文字が数字で
変換する文字のリストが無い訳ですよね。

すみません、どのような効果があるのかわからないのですが。
910nobodyさん:04/07/09 22:25 ID:???
>>899
コード中の
= ('A' =
これがAAに見えてしかたがない漏れは
いってよしでつか?
911nobodyさん:04/07/09 22:33 ID:???
>>909
ハイフンの有無が混在してると比較の邪魔。
それを比較しやすいデータにして返してくれる、という効果。

tr///d; ←この d の意味を調べると幸せになれる予定。
912nobodyさん:04/07/09 22:37 ID:170SmloA
>>910
こまった899の顔に見えるな
913nobodyさん:04/07/09 22:38 ID:???
>>909
それ多分tr/0-9//cdの間違いで、意図は数字以外の文字を
全部削って数字だけ残す、だと思われ。
914911:04/07/09 22:42 ID:???
_| ̄|○…吊ってきまつ。
915nobodyさん:04/07/10 00:04 ID:???
>>905
まあ>>907の言うとおりLWP使うのが常道だろうな。
LWPという名前が初耳だったら即ぐぐれ。
916nobodyさん:04/07/10 00:50 ID:???
>907

>915

有難う御座います。ざっと具具って読んでみましたが、鯖にインストールしないと使えないみたいですね。
借り鯖なんで、試して無理なら無理、ってことでしょうか。
917nobodyさん:04/07/10 01:48 ID:???
$file = 'system/index.html';
という感じで($fileは動的で、ファイル名が入ります)、
そのディレクトリ、を特定したいのですが、(つまりファイル名だけ省く)どうすればいいんでしょうか。
一番最後の . 〜その直前の / までの割り出し方があればなんとか出来そうなんですけど。
918nobodyさん:04/07/10 02:02 ID:???
/.*\//
919917:04/07/10 02:05 ID:???
($dir,$trash) = split(/./,$file);
で拡張子だけはずす事までは出来るんですけど。
$fileに入るファイルURLは / がいくつはいるか特定できないので / で区切るわけにもいかないし。
どうしたらいいんでしょうかね。
920917:04/07/10 02:05 ID:???
>>918
一足違いでした。
有難う御座います。それを調べてみます。
921917:04/07/10 02:22 ID:???
s/オプションをつけない状態の、「最初に見つかった○○」の逆みたいな、後ろから最初に見つかった、ってオプションはないんでしょうか?
最後のスラッシュを書き換えればその書き換えたもので区切って、前方を、ってできるような気がしたんですけど。

#完全におかしなことを言ってるような気がしてきた。

>>918
えっと調べてみたんですが、「一番最初に見つかった○○」〜「一番最初に見つかった××」ですかね。

$file = 'system/news/index.html';
だと「system/」しか拾ってくれないのではないでしょうか?
誤読してますかね。
922nobodyさん:04/07/10 03:15 ID:???
>>917
$file =~ s/(.*\/).*/$1/;
とか
$dir = substr($file, 0, rindex($file, "/") + 1);
923917:04/07/10 03:18 ID:???
>>922
試行錯誤を繰り返しておりましたが答えに到達できませんでした。
それでうまくいきましたです。本当に有難う御座いました。
924nobodyさん:04/07/10 07:39 ID:INTe94T2
あの、perlってコーディングの自由度が高いですよね。
 
そこでperlのソースコードで縦読みって作れるんでしょうか?
 
一見、ふつうのソースだが、縦とか斜めに読むと
面白い事が書かれているとか。
変数名だけじゃなくて、命令や関数が組み合わさって縦読みできたら、かなりすごいんじゃないでしょうか。
925nobodyさん:04/07/10 08:09 ID:???
926nobodyさん:04/07/10 08:10 ID:???
>>924
あんたにゃ無理かもしれんが、
エンコード文字列だけのスレの54がすごいぞ
http://pc5.2ch.net/test/read.cgi/php/1065258181/54

縦読みっていうレベルの話じゃないぞ。
見たら「ビックリ」するぞ。
漏れも初めてあのスクリプトを見たとき、perlの行き着く先には絶望しかないかと思ったよ。

じゃ、がんばって解凍してね。
927nobodyさん:04/07/10 12:46 ID:???
>>926
つーか、エバッてるから、ちーともびっくりしない。
928nobodyさん:04/07/10 14:43 ID:???
ユーはパアルのなにが知りたいんだい?

答えてやるよ!
929nobodyさん:04/07/10 15:06 ID:???
存在価値
930nobodyさん:04/07/10 15:31 ID:???
そうかい。ユーは存在価値が知りたいのかい。

存在していて、害にならなければ存在価値はあると言っていいだろう。

でも大事なことを教えてやろう。パアルのコージングとは無関係な質問ね。
931870:04/07/11 06:02 ID:???
あがいて結局できなく、半べそかいてもどってきました870です。

>>888
一応&Form_Input();にはしてあります。
それで、アドバイスがあった
  print $input{'1'} ;
を入れてみたのですが、表示されません。
一応ソースですが、再アップしてみたので、よかったらご覧になってください。

もう自分挫折しそうですorz
どなたか、愛の手を・・・
932nobodyさん:04/07/11 06:15 ID:???
>>931
print "Content-type: text/html;\n\n";

それと、ソースのファイル名が100q.zipじゃなくて100.zipになってたぞ。
933932:04/07/11 06:50 ID:???
>>931
ヘッダの問題じゃなかったのかな?

print $input{'1'} ;
って何を表示するのかわかってる?
print $input{$_} for 1..100; こうした方が君にはいいかも
>>888
$input{'1'}

foreach (1..100){
print qq($_ : $input{$_} <BR>\n);
}
にしてみる。
>934 Perlスレッドでのレスありがd
こんなスクリプトを書きましたが、結局画像の形だけが表示されてしまいしまた。
画像を出して、Locationで飛ばしたかったんだけど。
#!/usr/local/bin/perl
$image = "./image.gif";
$SIG{ALRM} = \&timeout;
#GIF画像の出力
sub timeout{
print "Location: http://******/success.html\n\n";
alarm 0;
exit;
}

alarm 5;

print "Content-type: image/gif\n\n";
#画像の書込
open(IMG,"$image");
binmode(IMG);
print <IMG>;
936935:04/07/11 18:26 ID:???
あ、「GIF画像の出力」コメントは、なしです。
937nobodyさん:04/07/11 21:09 ID:???
ttp://****/*.cgi?f=filename.jpgで
filename.jpgへリンクしたhtmlを出力させたいと思ってます。

<a href="特定のURL指定/$f">●</a>とおいたときに$fがfilename.jpgじゃなく空白になります。
filename.jpgを出力するために何か処理が必要になるのでしょうか?
htmlの出力、URLの指定などは問題なしです。
アドバイスお願いします。
938nobodyさん:04/07/11 21:16 ID:???
>>937
>>1
> 1: 自分はこう言う事がしたい。
> 2: それでこんな風にやってみたが・・・
> 3: こんなエラーが出て上手く行かなかった。

2が抜けてる。
?f=filename.jpg を $f にどうやって代入してるの?
939937:04/07/11 22:16 ID:???
>>938
レスありがとうございます。
?f=filename.jpgが$f指定してると思ってたので特に記述してなかったです。

?f=のような指定について調べてみたのですが、参考になるページが見つかりませんでした。
情報ありましたらアドバイスいただけないでしょうか?
940nobodyさん:04/07/11 22:26 ID:???
>939
QUERY_STRINGでぐぐれ。
941nobodyさん:04/07/11 23:12 ID:YH96401L
PHPだと
$array[] = "apple";
とすると配列の最後に"apple"を追加してくれるのですがこれをPerlでやる場合
簡単な方法ってどうやりますか?
942nobodyさん:04/07/11 23:14 ID:???
>>941
push
943nobodyさん:04/07/11 23:20 ID:???
どもです
944937:04/07/12 01:23 ID:???
>>940
ありがとうございます。解決しました。
945nobodyさん:04/07/12 09:47 ID:???
>>942
pushって遅くね?
946nobodyさん:04/07/12 10:17 ID:???
GD::Graphでグラフを描こうとしてるんだけど
$gd=$graph->plot(\@data);
open(IMG, '>test.gif' ) or die $!;
binmode IMG;
print IMG $gd->gif; ★
close IMG;

★のところで Can't call method "gif" on an undefined value
pngにしてもだめなので、ここで何をサポートしているのか知りたい。
サポートしているファイル形式を知るためのメソッドってありますか?
947nobodyさん:04/07/12 10:35 ID:???
>>946
ソースを読め
948nobodyさん:04/07/12 10:39 ID:???
>>945
SVとかPVとか何のことだか分かる?
949nobodyさん:04/07/12 11:03 ID:???
配列に小数点を入れるとき
@a = qw( 0.1 0.2 0.3 );
だとちゃんと入るんだけど
@a = { 0.1, 0.2, 0.3 };
だとなんかすっげー数字が入っている
なんでだすか?
950nobodyさん:04/07/12 11:26 ID:???
@a = ( 0.1, 0.2, 0.3 );
951nobodyさん:04/07/12 11:44 ID:???
>>950
なんですっげー数字が入るのか聞いているんだすよ。
952949:04/07/12 11:48 ID:???
>>950
ああ、そうだった
サンクスコ

>>951
確かにそれも気になるけど
953nobodyさん:04/07/12 12:53 ID:???
>>951
my @a = { 0.1, 0.2, 0.3 }; # ハッシュリファレンス 1 つを @a に代入
print @a, "\n"; # リファレンスを文字列として評価 → "HASH(0x10c1350)"

# 文字列 "HASH(0x10c1350)" を強制的に数値コンテキストで評価
# 0x10c1350 → 17568592
$_ += 0 for @a;

print @a, "\n"; # 17568592
954nobodyさん:04/07/12 12:58 ID:???
>>953
正確には文字列→数値じゃないな。リファレンスを数値コンテキストで
評価するとアドレスの値が返る。
955nobodyさん:04/07/12 13:28 ID:???
>>953
あ、なるほど。
956nobodyさん:04/07/12 19:33 ID:???
サブルーチンにファイルディスクリプタを渡したいんですが
957nobodyさん:04/07/12 20:56 ID:???
perlスクリプトをHTMLに埋め込むことって出来ますでしょうか?
例えばpingを打ちたいと思ったら
CGIだと
クライアントから要求→サーバがping実行→クライアントに実行結果を返す
ですが、
HTMLの中にスクリプトを埋め込むことによって、クライアントからpingを打つことは可能でしょうか?
うまく意味が伝わらなかったらごめんなさい_no
958nobodyさん:04/07/12 21:16 ID:???
>>957
無理
959nobodyさん:04/07/12 21:26 ID:???
960957:04/07/12 21:40 ID:???
>>958
回答ありがとうございます。
ゼミの教授が「タグで簡単に出来る」と言ってきて、
自分なりに色々調べたのですが、全くそのような情報がなかったので質問させて頂きました。
胸を張って「そんなこと出来ませんよ」って言いたいと思います!
961nobodyさん:04/07/12 21:52 ID:???
>>960
お前さ、一つ前のレスも読めないのか?
962nobodyさん:04/07/13 03:39 ID:???
いいじゃん
恥かくのは本人なんだから
963nobodyさん:04/07/13 05:45 ID:???
>>960
ゼミの教授は嘘つきだ
Perlにタグなどない!

だいたいHTMLに埋め込むのってCGIじゃなくてSSIでしょー
確かにSSIをHTMLに埋め込むのはタグだけどなぁ
964nobodyさん:04/07/13 06:00 ID:???
>>963
学生「先生!あのpingの話ですけど、できませんよ!」
教授「ほう、何か調べたのですか」
学生「はい。調査の結果、2chのnobodyさん(958)が『無理』と。句読点なしで」
教授「…帰れ」
…こんな感じのコじゃないかな。

「タグで出来る」ってのも、>>960さん用語に変換されてるだけかもしれない。
965nobodyさん:04/07/13 08:12 ID:???
ヘッダをimage/gifとかにして、
「<img>タグ」でアクセスとかだったら、
ちょっと、いぢわるだなぁ、その教授。
>957とりあえずガンガレ。。
966nobodyさん:04/07/13 11:28 ID:???
HTMLの中にperlを埋め込むだけなら PERL_SSI とかいう手もあるが、
「クライアントからpingを打つ」てのは難しそうに思えるなあ。
それができるとたぶん物凄いセキュリティホールになる。
967nobodyさん:04/07/13 12:36 ID:???
だから
無理
って言ったんですけどね・・・
968nobodyさん:04/07/13 13:17 ID:Q7wc8BxW
特定のフォルダにあるファイルを表示し、ファイルにリンクを張り、ファイルサイズとアップロードされた時間を表示しています。

print "<table>\n";
print "<tr><th>No.</th><th>FileName</th><th>FileSize</th><th>UploadTime</th></tr>\n";

opendir(DIR, "$dir" ) or die;
while(my $filename=readdir(DIR)){
    if($filename=~/^\.{1,2}$/){
        next;
    }
    ++$no;
    @fileinfo = stat("$dir$filename");
    $upldtime = &time($fileinfo[10]);
    $filesize = int ($fileinfo[7] / 1024);
    $filesize = ~ s/(\d)(\d\d\d)(?!\d)/$1,$2/g;
    print "<tr><td>$no</td><td><a href=\"$dir$filename\">$filename</a></td><td>$filesize KByte</td><td>$upldtime</td></tr>\n";
}
print "</table>\n";
closedir(DIR);

左端からNo.、ファイル名、ファイルサイズ、アップロードされた時間・・・と4つ並びます。
ここで、「アップロードされた時間」を基準にして、時間の新しいものから順にリスト表示したいのですが
根本的にやり方がわかりません。
whileより上でソートしていないといけないような気もするのですが・・・
誰か教えてください。。

&timeはここには出ていませんが、yyyy/mm/dd hh:mm:ss形式で表示させるためのサブルーチンです。
969nobodyさん:04/07/13 13:22 ID:???
>>968
lsの結果を出力すればいいじゃん?
970nobodyさん:04/07/13 13:33 ID:???
アップローダー作っておきながら、ソートもできんのか・・・
971nobodyさん:04/07/13 13:38 ID:???
>>968
whileの中でhtml出力まで一気にやらなけりゃいいんじゃないの?
while内でhashなりにデータ格納して、
後で好きなようにソートなり何なりしてHTML出力すれば?
972968:04/07/13 13:57 ID:Q7wc8BxW
みなさまありがとうございます。

>>969
system "ls -lt" >hoge.txt
・・・みたいな感じですね。system禁止されてなきゃいいのですが。

>>970
そうか。
アップローダーCGIを参考にすればよかったのですね。
全然思いつきませんでした。

ファイルのアップはFTPです。アップローダーなんて高機能なもの、まだ作る腕がありません。。

>>971
perlのsortを調べてて、「先頭からn番目(今回の場合は4番目)のものをキーにして・・・」というのが、探し当てられませんでした。リャマ本にも「すぐわかるperl」にもなかったですし、いろいろ探し回ったのですが。。
・・・と書いてて今思いつきました。
タイムスタンプを先頭に格納すればいい?

がんばってみます。 
973970:04/07/13 14:03 ID:???
>>972
>ファイルのアップはFTPです。
そうだったのか・・・スマンコ
974nobodyさん
print <<"EOS";
<table summary="アップロードされたファイルの一覧">
\t<tr><th abbr="番号">No.</th><th abbr="ファイル名(リンク)">FileName</th><th abbr="サイズ(Kilo bytes)">FileSize</th><th abbr="アップロード時刻">UploadTime</th></tr>
EOS

my $count = 0;
local *DIR;
if (opendir DIR, $dir) {
foreach my $filestatus (
sort { $b->[3] <=> $a->[3] } # 最新更新時間を降順に並べ替え
map { [ $_, qq|$dir/$_|, (stat qq|$dir/$_|)[7,9] ] } # [ファイル名、ファイル位置、ファイルサイズ、最終更新時間]
grep { !/^\.+/ } # . .. を排除
readdir DIR # 読む
) {
printf qq|\t<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>\n|,
++$count, # ファイル番号
sprintf (qq|<a href="%s">%s</a>|, $filestatus->[1,0]), # ファイル名とそのリンク
sprintf (qq|%s KBytes|, int($filestatus->[2]/1024) =~ s/(\d)(\d\d\d)(?!\d)/$1,$2/eg), # サイズ(KBytes)
×tamp($filestatus->[3]) # 最終更新時刻
}
}
print qq|<td colspan="4">ファイルがないかも (´・ω・`)</td>\n| unless $count; # $count が 0 ならば
print <<"EOS;
\t</tr>
</table>
EOS

脳内処理につきご勘弁m(_ _)m