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

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

レス数が1000を超えています。これ以上書き込みはできません。
0001nobodyさん04/05/26 16:48ID:kkhhiYmo
いらっしゃーい、Perlのコーディングで困ってる人のスレです。

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

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

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

過去ログやお勧めサイトは >>2-10
0002nobodyさん04/05/26 16:49ID: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/
0003nobodyさん04/05/26 16:50ID:kkhhiYmo
[過去ログ] 1 of 2

Part1 http://tako.2ch.net/test/read.cgi?bbs=perl&key=957208980 参照不能
 DAT: http://tako.2ch.net/perl/dat/957208980.dat
Part2 http://tako.2ch.net/test/read.cgi?bbs=perl&key=971817087 参照不能
 DAT: http://tako.2ch.net/perl/dat/971817087.dat
Part3 http://tako.2ch.net/test/read.cgi?bbs=perl&key=979894521 参照不能
 DAT: http://tako.2ch.net/perl/dat/979894521.dat
Part4 http://tako.2ch.net/test/read.cgi?bbs=perl&key=984430156 参照不能
 DAT: http://tako.2ch.net/perl/dat/979894521.dat
Part5 http://pc.2ch.net/php/kako/988/988728069.html
Part6 http://pc.2ch.net/php/kako/996/996075607.html
Part7 http://pc.2ch.net/php/kako/1000/10002/1000267444.html
Part8 http://pc.2ch.net/php/kako/1003/10039/1003900311.html
Part9 http://pc.2ch.net/php/kako/1009/10095/1009549309.html
Part10 http://pc.2ch.net/php/kako/1014/10145/1014556702.html
Part11 http://pc.2ch.net/php/kako/1017/10172/1017201229.html
Part12 http://pc.2ch.net/php/kako/1019/10199/1019917048.html
Part13 http://pc.2ch.net/php/kako/1022/10227/1022731565.html
Part14 http://pc.2ch.net/php/kako/1026/10269/1026977659.html
Part15 http://pc.2ch.net/php/kako/1028/10288/1028816385.html
0004nobodyさん04/05/26 16:50ID:kkhhiYmo
[過去ログ] 2 of 2

Part16 http://pc.2ch.net/php/kako/1032/10320/1032070299.html
part17 http://pc.2ch.net/php/kako/1034/10345/1034583844.html
part18 http://pc.2ch.net/php/kako/1037/10377/1037797479.html
part19 http://pc.2ch.net/php/kako/1042/10422/1042260745.html
part20 http://pc2.2ch.net/php/kako/1044/10447/1044717887.html (タイトルに19と誤記)
part21 http://pc2.2ch.net/php/kako/1047/10479/1047980851.html
part22 http://pc2.2ch.net/php/kako/1050/10503/1050369328.html
part23 http://pc2.2ch.net/php/kako/1053/10530/1053051519.html
part24 http://pc2.2ch.net/php/kako/1054/10549/1054992610.html
part25 http://pc2.2ch.net/php/kako/1056/10567/1056730690.html
part26 http://pc5.2ch.net/php/kako/1059/10590/1059043704.html
part27 http://pc5.2ch.net/php/kako/1060/10608/1060808783.html
part28 http://pc5.2ch.net/php/kako/1063/10635/1063562491.html
part29 http://pc5.2ch.net/php/kako/1066/10662/1066286828.html
part30 http://pc5.2ch.net/test/read.cgi/php/1069846177/
part31 http://pc5.2ch.net/test/read.cgi/php/1072896288/
part32 http://pc5.2ch.net/test/read.cgi/php/1075545279/ (タイトルに31と誤記) 前スレ
part33 http://pc5.2ch.net/test/read.cgi/php/1078076768/
part34 http://pc5.2ch.net/test/read.cgi/php/1081148490/
0005nobodyさん04/05/26 16:51ID:kkhhiYmo
[ひまぢん氏のミラー]
Part1 http://www.angelfire.com/ak5/2ch-web-program/kako/957208980.html
Part2 http://www.angelfire.com/ak5/2ch-web-program/kako/971817087.html
Part3 http://www.angelfire.com/ak5/2ch-web-program/kako/979894521.html
Part4 http://www.angelfire.com/ak5/2ch-web-program/kako/984430156.html
Part5 http://www.angelfire.com/ak5/2ch-web-program/kako/988728069.html


[総合]
 ・http://www.excite.co.jp/world/ # 英文のページ多いから一応
 ・Perl Com: http://www.perl.com/
 ・CPAN.com: http://search.cpan.org/
 ・ActivePerl: http://www.activestate.com/
 ・CGI-ML:http://forest.ne.jp/cgi-ml/

[お薦め]
 ・Perlメモ: http://www.din.or.jp/~ohzaki/perl.htm ★読んどけ
 ・Perl Recipes: http://www.effectiveperl.com/recipes/ # 死んでるか?
 ・Randal's WebTechniques columns: http://www.stonehenge.com/merlyn/WebTechniques/
 ・Perlの部屋: http://www.cc.rim.or.jp/~midorin/mad-p/perl/index.html
 ・Perl初心者の部屋:http://www.harukaze.net/~mishima/perl/
 ・Perlリファレンス:http://www.big.or.jp/~mio/ga/pl/plref/pl_ref.htm
 ・Perlのページ:http://homepage1.nifty.com/nomenclator/perl/
0006nobodyさん04/05/26 16:52ID: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/
0007nobodyさん04/05/26 17:13ID:???
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です。
0008nobodyさん04/05/26 17:23ID:???
スレタイ100回音読汁
0009nobodyさん04/05/26 17:39ID:???
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つのフィールドのみに値が入るようにしたいのです。
0010nobodyさん04/05/26 17:44ID:???
>>9
クッキー別にすればいい。
0011nobodyさん04/05/26 23:44ID:???
>PostgreSQL1.4.2

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

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

あるいは

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

とかする手もなくはないがそこまでする?
0017nobodyさん04/05/27 13:25ID:???
>>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');
0018nobodyさん04/05/27 13:27ID:???
>>17
ごめん。 s/-MO:/-MO=/g
0019nobodyさん04/05/27 20:42ID: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");
0020nobodyさん04/05/27 20:46ID: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");
0021nobodyさん04/05/27 20:46ID: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");
002219-2104/05/28 01:38ID:???
悪気はなかったんです・・_| ̄|●
書き込んだらサーバーエラーになってCtrl+F5押しても
書き込まれてなかったのでうっかり・・・

本当に申し訳ないです。

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

尾永井します

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

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

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

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

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

ファイルを開いて、カンマで区切った後、それをさらに:で区切ろうと思ったのですがうまくいきません。
どうしたらいいですか?
0038nobodyさん04/05/29 19:18ID:???
>>37
http://flex.ee.uec.ac.jp/texi/perl/perl_56.html
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlre.html

my @data = split /[,:]/;
0039nobodyさん04/05/29 19:37ID:UPbtVCfi
>>38
ありがとうございます。
そんな技があったとですね
0040nobodyさん04/05/29 20:08ID:???
>>36
いや、ネタはいいから
0041nobodyさん04/05/29 20:21ID:???
>>40
普通使うぞ。
きちんと配列に格納すれば値をいくつ渡しても配列でらくらく操作。
0042nobodyさん04/05/29 20:23ID:???
普通の基準を聞きたいな。
少なくとも俺は使わない。
今までは使っているソースを見たこともない。
0043nobodyさん04/05/29 20:28ID:???
配列を使わない方が普通と言わんとばかりの煽りだな(プ
0044nobodyさん04/05/29 20:36ID:???
まぁ、使う場合は使うよな。普段はそんなに使わないが
0045nobodyさん04/05/29 21:07ID:???
ifの文章でなら書けるのですがもっと簡単に書ける方法がないか教えてください。

if ($pass eq aa ) { $name = "ああ";}
if ($pass eq bb ) { $name = "いい";}
if ($pass eq cc ) { $name = "うう";}
if ($pass eq dd ) { $name = "ええ";}
 ・
 ・
みたいなのがずっと続くんですが。。
0046nobodyさん04/05/29 21:23ID:???
my $name_list = {'aa' => 'ああ' , 'bb' => 'いい' , 'cc' => 'うう' , 'dd' => 'ええ'};
$name = $name_list->{$pass};
0047nobodyさん04/05/29 22:12ID:???
>>45
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlsyn.html#Basic_BLOCKs_and_Switch_Statemen
0048nobodyさん04/05/29 22:39ID:???
>>42
CGI.pmが許しているというのは普通の基準にはならないかね。
0049nobodyさん04/05/29 22:44ID:???
>>42みたいに経験が乏しかったり勉強不足の奴が見たことないとか言ってもなぁ・・・
0050nobodyさん04/05/29 23:04ID:???
そんなにいじめるなよ
初心者はこうして一つ一つ知識を蓄えていくんだから生暖かく見守ろうぜ
0051nobodyさん04/05/29 23:05ID:???
>>42を翻訳機に通してみた。

普通の基準は俺。
少なくとも俺は使い方が分からないから使えない。
今まで他人のソースを見たこともない。
0052nobodyさん04/05/29 23:07ID:???
checkboxのnameにせっせと異なる名前を付けているのはある意味滑稽だな。
0053nobodyさん04/05/29 23:13ID: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」が表示されてしまいます。
間違いをご指摘ください おねがいします!
0054nobodyさん04/05/29 23:19ID:???
>>53
演算子について学ぼう
0055nobodyさん04/05/29 23:21ID:???
>>53
http://www5a.biglobe.ne.jp/~n_rieko/perl/5.htm#5-4
0056nobodyさん04/05/29 23:34ID:???
>>54-55
_| ̄|● お恥ずかしい

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

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

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

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

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



いや、お前が一番痛いよ・・・
メル欄引っ掛けとかキモ杉
0077nobodyさん04/05/30 02:14ID:???
>>76
>>75は誰か引っかかると思って書いてるんだよ
メル欄晒しはもう少し待ってやるべきだった。
>>75ないてるぞ・・・
俺知らない
0078nobodyさん04/05/30 02:15ID:???
>>68=>>71=>>75
もういいよ
0079nobodyさん04/05/30 02:15ID:???
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
0080nobodyさん04/05/30 02:16ID:???
納得させられる説明ができなくて粘着どうこうしか言えないのはかなりイタイな。
0081nobodyさん04/05/30 02:16ID:???
>>80
だからいつまで粘着してるの?
0082nobodyさん04/05/30 02:17ID:???
checkboxの変数名ごときでここまで荒れる>>80が素敵☆
付き合おうよ★
0083nobodyさん04/05/30 02:22ID:???
>>81
だからいつまで粘着してるの?
0084nobodyさん04/05/30 02:23ID:???
今度は顔真っ赤にしてオウム返しか
典型的な厨房だな。
宿題して寝ろよ
0085nobodyさん04/05/30 02:25ID:???
とりあえず言えること

checkboxを学べ
それは板違いだ

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

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


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

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

($i1,$i2) = split("_",$name);
01039904/05/30 21:48ID:???
>>100-102
すいません。一応教科書など持ってます。
()は完全にわすれてました・・。
が、()をつけてもエラーが出ます。。
0104nobodyさん04/05/30 21:50ID:???
じゃあ、別の場所でエラーが出てるんだろ。
エラーログをよく見ろ。
01059904/05/30 22:07ID:???
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.

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

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

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

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

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

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

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

英 語 が 読 め な い ん で す

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

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

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

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

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

#!/usr/bin/perl
$str = "あい";
$str =~ tr/あいうえお/アイウエオ/;
print $str;
0143nobodyさん04/06/05 14:05ID:???
ひらがなやカタカナがマルチバイトだから。
0144nobodyさん04/06/05 14:41ID: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は適当に自分が使っている
コードにあわせてくれ。
0145未承諾広告※ ◆TWARamEjuA 04/06/05 15:05ID:CuLBZ8wK
>>144
5.8.0 環境とのことですので後者の方ですね。
0146nobodyさん04/06/05 15:06ID:???
フォームを使わずに、POSTでデータを送る事は出来ませんか?
0147プロ固定金土日こと星山成寿(李明煕/イ・ミョンヒ)04/06/05 15:21ID:???
プロ固定金土日こと星山成寿(李明煕/イ・ミョンヒ)
の2ちゃんねるワンポイントアドバイスの時間です。

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

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

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

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

1: 自分はこう言う事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
016015804/06/06 17:49ID:RQ9IWgny
説明不足ですみません。
変数に代入されている値がスカラーかハッシュへのリファレンスかで
処理する内容を変えたいのですが,プログラム内部でそれを判断する
方法はないでしょうか?
0161nobodyさん04/06/06 17:49ID:???
下記のようなごく初歩のプログラムがあるんですけど
$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);
}
0162nobodyさん04/06/06 18:01ID:???
>>161
> $noって=$filenameですよね?
既にこの時点で(略
0163nobodyさん04/06/06 18:42ID:???
>>160
ref <変数> でリファレンスかそうでないかがわかるよ。
リファレンスじゃないなら偽。
リファレンスなら、種類によってARRAYとかHASHとかが返される。
0164nobodyさん04/06/06 18:56ID: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
016516404/06/06 18:57ID: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
--- ここまで ---
016616004/06/06 19:09ID:???
>>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
016716104/06/06 20:05ID:ZCQZgjkY
この部分イフの前にプリントしてる
のに後にイフで再度書き込もうとしてるのはなぜですか?

print "$no";

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

print "$no";

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

print "$no";

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

ですよね?
あれ?なんでファイルハンドルつける必要あるのですか?
0174nobodyさん04/06/06 21:04ID: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に大きな違いが出るのは何故なんでしょうか?
0175nobodyさん04/06/06 21:20ID:???
wallclock secs: 実時間(起動してから終わるまでの時間)
usr: (そのプログラム自身が)ユーザモードで消費したCPU時間
sys: (そのプログラム自身が)カーネルモードで消費したCPU時間
cusrとcsysはそのプログラムから起動された子プロセスが消費した分
最後のx.xx CPUはそれらの合計。

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

疑問とは?

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

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

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

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

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

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

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

#行数・項目数(, 区切り)とも不確定の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] とすると、最後の行の目標項目が表示される
0192nobodyさん04/06/07 05:02ID:???
>>164
しっかりファイル頭でuse宣言してる?
0193nobodyさん04/06/07 05:53ID:???
>>191
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perllol.html
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perldsc.html
019419104/06/07 06:53ID:???
>>193
ありがとうございます。
まさに知りたかった事が載ってました。
ここ読んで、やり直してみます。
0195nobodyさん04/06/07 08:45ID:mlYstQXa
>>175さん
ありがとうございました。

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

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

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

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

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

ま、自己満足以外のメリットは殆どないが、やりたきゃご自由に。
http://flex.ee.uec.ac.jp/texi/perl/perl_toc.html
0201nobodyさん04/06/07 14:25ID:???
赤ラクダのヨブの話は好きだったんだが
あれを Perl5.8 対応にしてヨブが粘土板を UTF-8 で刻むようなチュートリアルが読みたい
0202nobodyさん04/06/07 17:08ID: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」では取得できないのですか?
0203nobodyさん04/06/07 17:45ID:???
>>202
readdir で得られるファイル名はフルパスでないからぢゃよ
020420204/06/07 17:51ID:SF6UmQvx
>>203
返事、ありがとうございます。
そうかとも思ったんですが、ならば !-d で判定できているのは…んん?

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

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

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

どなたかアドヴァイスおねがいできませんか!
0207nobodyさん04/06/07 20:55ID:???
>>206
改造スレで見てもらったほうがいいよ。
0208nobodyさん04/06/07 20:59ID:???
検索したほうがいいよ
0209nobodyさん04/06/07 21:02ID: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 の出力を変数に取り込むにはどうすればいいんでしょうか。
0210nobodyさん04/06/07 21:02ID:???
一つ言えるのは掲示板なんぞに解析し込む馬鹿はキモイ。
ついでにプログラミングは100年は早い。
021120604/06/07 21:08ID:???
>>207
ありがとう、そうします。
0212nobodyさん04/06/07 21:14ID:???
>>208
アクセス解析 掲示板cgiに 埋め込む

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

@data = 1 2 3 4 5 〜 100

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

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

5を好きなように変えれば?
0219nobodyさん04/06/08 06:03ID:???
>>216
@data = sort{ abs($a-5) <=> abs($b-5) } @data;
0220nobodyさん04/06/08 14:30ID:???
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日が経過してしまいました。

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

>>221
Redhat9です。

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

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

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

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

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

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

一番簡単な方法は、クエリ部分を引数(ARGV)で取るようにして、
``かqx//かsystemあたりで呼び出す。
分からなければ、Perlの入門書をどうぞ。
0239236 04/06/09 10:36ID:???
>>238
ありがとうございます。調べてみます!
0240nobodyさん04/06/09 11:04ID:???
お前ら優しすぎ
0241nobodyさん04/06/09 11:17ID:???
>>206
>>236

http://pc5.2ch.net/test/read.cgi/php/1049514428/528-529
0242nobodyさん04/06/09 13:31ID:???
優しくして得するのは優しくした方
0243nobodyさん04/06/09 14:24ID:???
親切は人の為ならずってか。

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

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

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

print %$form;
>of134t

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

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

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

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

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

リファレンスもローカル変数化するべきでしょうか?
0251nobodyさん04/06/09 23:32ID: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>
0252nobodyさん04/06/09 23:33ID:???
$form = { map{ split /-/ } @test };
0253nobodyさん04/06/09 23:35ID:???
>>250
グローバル変数は基本的に使わないほうがいいんじゃ?
当然リファレンスも
あと、>>252>>249にね

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

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

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

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

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

みたいに。
0257nobodyさん04/06/10 00:02ID:???
>>255
向こうがJISだったら、JISで送るしかないんじゃ?
<form>タグのencなんたらってのでこちらの送信するときの円コードは変えることができると思う。 ブラウザの挙動は知らないけど。
0258nobodyさん04/06/10 00:05ID:???
>>257 IEは無視するよ
>>251 いい加減板違い気付けよ
0259nobodyさん04/06/10 00:10ID:Zv7Yb66M
>>251
微妙にスレ違い。<form ... ACCEPTCHARSET="shift_jis">
026024804/06/10 00:10ID:???
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;
とかをメソッドの初めにしてるということですよね?
今まで、うまくオブジェクト指向ちっくな部分が理解できてませんでしたけど、
なんかもの凄いヒントもらった気がします。ちょっと考えてみます。
0261nobodyさん04/06/10 00:18ID:???
>>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
ごめん、なにいってるわからなく。

>
026224804/06/10 00:27ID:???
>>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}="文字列";
はリファレンスのアドレス?メモリ番号といいますか、それが決まる前に値を入れる・・・
というか、値を入れるのと同時にアドレスも持つみたいな感じを以前に読んだ気がします。

かなり良い感じになってきたので、解説サイト行って勉強しなおしてきます。今なら前より
理解できそう。
026325104/06/10 00:37ID:outd/ELT
>>259
ありがとうございます。しかし、その内容では駄目なようでした・・・
板違いスイマセンでした。この内容だとHTMLなのかな・・・?
026424804/06/10 09:53ID:???
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}でいけるかなと思いましたがやはり
駄目でした。

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

(モジュールの場合)
コンストラクタ
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->の中身に処理結果を反映させて行く。みたいな感じでいいでしょうか?
これなら一応グローバル変数は排除できるっぽいです。



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

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

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

こうじゃなくて

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

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

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

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

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

>>275
$self->{data1} = $a;とした場合は、$self->{data}->{hogehoge}を変更したら、$a->{hogehoge}も変更されると思う。
ム板->プログラム板
0277nobodyさん04/06/11 12:04ID:???
質問いいでしょうか。文字列と数値の扱いです。
例ですが、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]) {
こういう扱いの違いについてです。
0278未承諾広告※ ◆TWARamEjuA 04/06/11 13:52ID:9CQ7zNJb
>>277
都合の悪いときのことをいろいろと想像してみると楽しめるんじゃないかなぁ。
0279nobodyさん04/06/11 14:05ID:???
数値比較の場合、num=xxxとやると0と一致するね。
文字列比較の場合、num=03とやると3と一致しないね。
0280nobodyさん04/06/11 20:43ID:???
perlを始めて数ヶ月の超初心者です。split関数についての質問です。
文字列を分割して配列に格納するまでは良かったのですが
配列の最後の文字列だけを取得する方法がわかりません。

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

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

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

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

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

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

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

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

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

>>290
かなりのプログラミング言語ではホワイトスペースはどれだけ会っても半角スペース1分として認識される。
みたいなことが見つかった。使っていいんだろうけど、不安。だから誰かに大丈夫と言って欲しい。
0292nobodyさん04/06/12 01:39ID:???
大丈夫
0293nobodyさん04/06/12 02:10ID:???
ていうか、タブは\tだろ
入れ子をわざわざスペース4個でやれと?
アフォの子ですか?
0294nobodyさん04/06/12 02:15ID: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のままにすることは可能でしょうか?
0295nobodyさん04/06/12 02:25ID:???
>>293
ソースの半分がスペースって割と見るぞ
>>294
方法によっては可能
029628604/06/12 02:35ID:???
>>292
ありがと!かなりすっきりした!

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

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

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

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

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

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

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

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

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

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

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

ああ!!

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

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

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

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

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

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

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

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

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

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

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

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

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

ただ、実際にやる人間がコピペができるかどうか・・・・;
035034704/06/14 20:44ID:???
>>348
じゃあここは何の為にあるの?・・・・・・って浮かんできたけど、読んでみる。ありがと。
0351nobodyさん04/06/14 20:48ID:???
質問するのはマニュアル読んだ後な、それでも分からなかったらって事。
0352nobodyさん04/06/14 21:03ID:???
>>346
お前は運用の板でネチョネチョやってろよ。
色んな板で糞コテの売名したいか?
0353nobodyさん04/06/14 21:04ID:???
>>349
だからスレ違いだって言われてるだろ。
ウザイからもう来るな。
0354nobodyさん04/06/14 21:13ID:???
UIのスレはここではない!
0355nobodyさん04/06/14 21:18ID:???
>>346
コテはうんざりだから必要もないのにいちいち名乗るな。
それこそ売名ならやめられんのかもしれんが。
本7とカポコンの悪臭だけでゲロゲロだから。
0356 04/06/15 13:21ID:???
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;
と宣言しています。原因はなんでしょうか?
0357nobodyさん04/06/15 14:41ID:???
>>356
だからここはコーディング質問スレだっていってんだろ!!!!!!
モジュールの使い方は専用のスレに行け!!!!!!!!!!!
0358nobodyさん04/06/15 15:08ID:???
if($res =~ m/!!!!!/) $flag = "厨房";
0359nobodyさん04/06/15 15:12ID:???
>>358=356
スレ違いな奴はくるな
0360nobodyさん04/06/15 16:21ID:dQxW4G/W
以下のような、1行に1件分の情報が記述されているタブ区切りテキストがあります。
このデータをブラウザから編集させたいと思うのですが、なにか参考になるモジュールなどは
ありませんでしょうか?
Perl5以上で動作するものがいいです。

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

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

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

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

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

【CGI】こんなCGI探してますver.13
http://pc5.2ch.net/test/read.cgi/hp/1081608108/
0369nobodyさん04/06/15 22:50ID:???
数行にわたって
ID:passという書式でかかれているdatファイルから
特定のIDとパスワードを検索してその文字列だけを書き換えたいのですがどうすればいいでしょうか?
教えて下さい。お願いします。
0370nobodyさん04/06/15 22:58ID:???
やることわかってるじゃん
open でファイル開くことから教えてくんかい?
037136904/06/15 23:25ID:???
ファイル読み書きはできます。
特定のIDとパスワードを検索してその文字列だけを書き換えたい
という処理の仕方をどうすればいいかわからないんです。よろしくお願いします。
0372nobodyさん04/06/15 23:28ID:???
>>371
読み込んで書き換えて上書きしろよ
0373nobodyさん04/06/15 23:32ID:???
>>371
ifを使え
0374nobodyさん04/06/16 00:15ID:???
ちょっとは自分で考えないのかね。
0375sage04/06/16 01:00ID:???
頭が無いんです
0376nobodyさん04/06/16 01:06ID:???
> 特定のIDとパスワードを検索してその文字列だけを書き換えたい
正規表現を15分でいいから勉強するよろし。
0377nobodyさん04/06/16 04:13ID:???
>>369
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlfaq5.html#How_do_I_change_one_line_in_a_fi
037836904/06/16 17:05ID:???
>>377
ありがとうございます。
0379nobodyさん04/06/17 12:14ID:???
質問いいでしょうか。
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などをあらかじめ配列に追加しておいて、配列内のそれらの変数を判定させると言う書き方はできませんか?
0380nobodyさん04/06/17 12:38ID:???
>>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();
  }
}
0381nobodyさん04/06/17 14:12ID:???
>>379です。
解決しました。レスありがとうございます。
0382nobodyさん04/06/18 08:52ID:???
すみません。正規表現について教えてください
文字列内に以下の条件を含む部分があるかどうかを
チェックするために正規表現を使ってみたいのですが
いかようにすればよいでしょうか?
?nnnn (nnnnは4桁の数字)
0383nobodyさん04/06/18 10:05ID:???
スレタイ嫁
でも俺すげー優しいからヒントをやろう。

0-9

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


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

ブラウザからあるperlのプログラムを起動して、データベースの更新をしているのですが、
これをバッチとして自動起動したいと思っています。
で、 perl xxxx.cgi  とすると、エラーになります。
どこでエラーになるかを調べたところ require xxxxx.cgi でrequireが正しくされていないようです。
perl はバッチ処理としては動かないのでしょうか?
0397nobodyさん04/06/19 07:02ID:???
requireをドライブ名からの絶対パスで指定すればいいんでないの?
0398nobodyさん04/06/19 07:28ID:Bryn3NL2
>>397
レスサンクスですが
絶対パスでもだめでした
0399nobodyさん04/06/19 09:50ID:???
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%になって
いるので何かやってはいるみたいなのですが……。
040039904/06/19 09:50ID:???
#$?[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")
0401nobodyさん04/06/19 10:17ID:???
>>396
perl -IC:/WINNT/system32 foo.cgi
-Iオプションでrequireするディレクトリを追加してみるとか

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

(w
0408nobodyさん04/06/20 14:13ID:???
ログファイルを保存するのに
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
とこういう風に上書きしていくとどんどん増えていってしまいます。
どこがわるいのでしょうか?教えて下さい。お願いします。
0409nobodyさん04/06/20 14:38ID:???
つい最近も見たような質問だな。

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

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

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

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

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

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

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

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

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

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

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

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

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

0432nobodyさん04/06/21 23:30ID:???
どいつもこいつも die だの 死ぬだの、、、もっと命を大事にしてくれよ!
0433nobodyさん04/06/21 23:47ID:???
かと言って本7みたいに逃げてばかりなのもイカガ谷^hなものかと。
0434nobodyさん04/06/22 11:03ID:???
>>426
jcodeを使っても、sjisの場合とかは第二引数に範囲指定が効かない場合がある。
&jcode::tr (\$value, "0123456789", "0-9");
0435nobodyさん04/06/22 12:14ID:???
>>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.
0436nobodyさん04/06/22 14:14ID:???
PerlでForm動かすのが激しく苦手なので得意な方教えてください。

FormでボタンAとボタンBを作って、web上でボタンA、Bを押すとそれぞれ
$Xの数値を変える(たとえばボタンAを押したら$x = 1、Bを押したら$x = 2)
というのを作りたいんですが、どうすればいいでしょうか。
教えてください。お願いします。
0437nobodyさん04/06/22 15:07ID:???
↑とりあえず黙ってくれる?そしてスレタイ嫁
0438nobodyさん04/06/22 15:16ID:???
きっと説明も激しく苦手なんだろうよ
0439nobodyさん04/06/22 18:00ID:???
<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();
0440nobodyさん04/06/22 19:37ID:???
PERLでフォームからのデータをSTDINから受け取ってそれを使って色々処理をする場合
受け取った一番初めに中身に変な文字列が入っていないかを検査したほうがいいのですか?

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

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

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

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

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

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

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

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

#自治厨
スレ違い

>>自治厨
森へお帰り

#444
やってみろよ

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

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

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

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



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

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

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

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

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

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

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

>さあ帰った帰った。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

>>511
応援ありがとうございます。頑張ります!
0513nobodyさん04/06/24 22:48ID:???
http://www.mnot.net/cache_docs/
いいページ見つけた。俺も後で読んでみるよ。
0514nobodyさん04/06/24 23:03ID:???
>>513
またウイルスだったりして・・・・とりあえず関係ない俺は踏まないでおこう。
0515nobodyさん04/06/24 23:10ID:???
http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&oe=UTF-8&q=http%3A%2F%2Fwww%2Emnot%2Enet%2Fcache%5Fdocs%2F
心配なときは、一旦グーグルに入れればいいのだ。
0516nobodyさん04/06/25 02:44ID:???
ActivePerlをwin98に入れてPERLのテストしてるんだけど、-cを使った文法チェックが
うまくいかない。

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

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

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

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

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

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

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

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

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

ごめん。今からエラー文そのままあげます。
0523nobodyさん04/06/25 14:20ID:???
>>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でモジュール読みこんでると失敗するのですか?
まず何を調べるべきでしょうか?
0524nobodyさん04/06/25 14:28ID:???
>>521

sprintf( "%04d/%02d/%02d", reverse(@Time[3..5]) );
0525nobodyさん04/06/25 14:46ID:???
@INC
052651604/06/25 14:57ID:???
>>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に書けるとエラーはでないのでモジュール側には問題なしかと。
052751604/06/25 15:51ID:???
#!/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への追加が失敗していて、読みこむファイルのパスが見つからないってことだよね?
0528nobodyさん04/06/25 16:18ID:???
>>527
ああなるほど、こりゃ確かに >>516 の質問の仕方が悪い。

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

なんでまた、
「@INC に push しさえすればサーチパスを追加できる」
なんてことを考えたんだ?
0529nobodyさん04/06/25 17:01ID:???
use libしろ。または、ちゃんとプログラムが置いてある所まで移動してやれ。
か、Perl/libに入れるとか
053051604/06/25 17:25ID:???
>>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
でやると問題なく動作するけど、サーバではエラーになるんですか?
まだサーバと契約してないから、試せない。
0531田舎者 ◆BNNnMrNVbI 04/06/25 17:26ID:???
おお!すごいなぁ。
0532田舎者 ◆o0/tSn5Zoc 04/06/25 17:27ID:???
最高ですね!
0533nobodyさん04/06/25 17:34ID:???
初心者は 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 を読んでくれる。
053451604/06/25 17:49ID:???
>>533
ありがとうございます!今
use lib "C:\WINDOWS\デスクトップ\httpd142k\cgi-bin\test";
を初めに追加してエラーだったので、
use lib 'C:\WINDOWS\デスクトップ\httpd142k\cgi-bin\test';
にしたら成功しました!シングルクォーテーションじゃないといけないんですね。

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

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

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

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

とか。ちょっとブサイクなコーディングだけど、後は自分でもう少し処理を軽くするといいよ。
054451604/06/25 21:54ID:???
ごめん。$cookをifの条件文で使うときは$$cookとかでデリファレンスしてね。
054551604/06/25 22:03ID:???
なんかクッキーの読みこみ後に=以前を切るの忘れてた。
修正も兼ねてもっと簡単に。
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>
でいいね。
0546nobodyさん04/06/25 22:12ID:???
>>545
もし$c1にcheckedが入った場合$2には何が入るの?
0とかでもタグに不都合はないのかな…
0547nobodyさん04/06/25 22:15ID:???
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>|, $_;
}
0548nobodyさん04/06/25 22:28ID:???
>>546
まあほとんどの場合は undef が空文字列として展開されると期待されるだろう

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

%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
0551nobodyさん04/06/25 23:19ID:???
しばらくして気付いたけど、ラジオボタンだったんか・・・
まぁ似てるからいいか。
0552nobodyさん04/06/26 04:58ID:???
すごく初歩的な質問ですみませんが、連想配列のkeyの名前は通常何文字くらいが理想ですか?

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

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

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

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

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

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

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

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

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

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

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

仮想メモリーを使うくらい。
0572nobodyさん04/06/27 10:44ID:???
apache の RLimitMEM 制限に引っかからないくらい。
0573nobodyさん04/06/27 15:33ID:???
>>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);

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

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

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

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

あ、ただCGIスクリプト内で別のCGIスクリプトの出力をそんまま
取り込みたい、って話なら、それは「CGIのお作法」の話なので、
別をあたってください。
でもそれならperlスクリプトAとBでって聞き方はおかしいよ。
0587nobodyさん04/06/28 00:54ID:???
>>585
前言われたやり方+シュウォルツでうまいことやりなさい。
0588nobodyさん04/06/28 01:40ID:???
$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";
}
0589nobodyさん04/06/28 03:19ID:???
>>588
わかりづら!
0590nobodyさん04/06/28 05:19ID:???
変数名に使えるのってアンダーバーと英数字だよね?

<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っていうのができちゃう。
一応動作に支障はないけど、ハッシュのキーにピリオド使っていいの?
0591nobodyさん04/06/28 05:45ID:???
>>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;
0592nobodyさん04/06/28 06:02ID:???
条件式?:の条件演算子って条件式で真なら左辺を偽なら右辺を返すから普通は
$a = $b == 0 ? 1:2;
みたいに使うんだろうけど、
map{ /a/ ? $a += $a : $b += $a } @array;
みたいに真と偽の時の処理に↑みたくやるのも正しい使いかた?

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

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

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

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


A000001<>xxxx<>XXXXX
A000003<>xxxx<>XXXXX
A000010<>xxxx<>XXXXX
A000004<>xxxx<>XXXXX
A000008<>xxxx<>XXXXX
0598nobodyさん04/06/28 15:04ID:???
>>597
既出レコードIDの最大値に+1=追加レコードのID、てわかってるならそうすればいいじゃん。
途中まででもいいから自分でやってみるべし。
0599nobodyさん04/06/28 15:23ID: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 です。
0600nobodyさん04/06/28 15:30ID:vj4wrqzo
教えてください。
cgiを直接呼ばれたのとpostで来たのとを区別するにはどうしたらいいのでしょうか?
0601nobodyさん04/06/28 15:33ID:???
readって必ず指定した長さまで一気に読めるわけではないので、
ループしないとだめじゃない? とくに入力元がpipeやsocketのときは
適当にどこかのバッファ長まで読まれた状態でひとまず戻ってくる
ことはよくある。

0602nobodyさん04/06/28 15:36ID:???
>>593
http://perldoc.com/perl5.8.4/pod/func/sort.html
http://flex.ee.uec.ac.jp/texi/perl/perl_54.html

>>599
ご利用の httpd のスレへ行って下さい。

>>600
http://pc5.2ch.net/test/read.cgi/php/1055597189/

>>601
http://perldoc.com/perl5.8.4/pod/func/read.html
http://flex.ee.uec.ac.jp/texi/perl/perl_90.html
0603nobodyさん04/06/28 15:38ID:???
>>599
勉強のためとかじゃなけりゃCGIモジュール使った方がいいような気がする。
060459304/06/28 16:26ID:???
>>594
>リスト中のどれか2つの要素。
>どれがどの順で何回渡されるかは決まってなかったような。
>(sortで使ってるアルゴリズムにもよるだろうし)

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

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

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

$a と $b に何が入るかは >>602 のページに明示されているし、
sort 関数の使い方ではなくソートアルゴリズムの話ならこの辺
行った方がいいよ。
http://pc5.2ch.net/test/read.cgi/tech/1088022524/
060752604/06/29 04:35ID:???
>>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/
です。
0608nobodyさん04/06/29 05:03ID:???
>>607
漏れはローカルとサーバ両方でパスとかを書き換えず動かしたいので、
my $server = $ENV{'REMOTE_ADDR'} eq '127.0.0.1' ? 'http://127.0.0.1/' : 'http://www.鯖.com/' ;
って事をしている。
0609nobodyさん04/06/29 05:55ID:???
>>607
>文法チェックでエラーがでました。
そのエラーメッセージを書こう。

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

>>608
use CGI ':cgi';
print server_name();
061060704/06/29 06:07ID:???
>>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.
061160704/06/29 06:09ID:???
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';
にするとオーケーがでます。\を/に変えてもオーケーはでます。

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

それで、
and,or

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

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

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

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

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

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

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

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

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

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

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

>>612
おそらく優先度の違いだけかと。 好みの問題だけど、括弧を減らしたいときなどに、and, orを使うといいと思う。
らくだ本ではand, orのほうが自然だからこっちのほうがいい、見たいなことがかかれていた気がしないでもない。
0625nobodyさん04/06/29 17:19ID:???
>>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
062660704/06/29 21:39ID:???
>>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
少しエラー内容が変わりましたがやはり駄目なようです。
0627nobodyさん04/06/29 21:47ID:???
>>626
おいアホかC:/cの中にTest1.pmがあんのかよ!?
0628nobodyさん04/06/29 21:49ID:???
>>626

>>625
>C:/WINDOWS からの相対パス ../c は C:/c で
ってのは
 C:/WINDOWS からの相対パス ../c は C:/c のことだ
の意味だ(と思われる
0629nobodyさん04/06/29 22:17ID:???
>>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
063060704/06/29 22:46ID:???
>>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と書いてるのと同じことになるってわけですね;すみません勘違いしました。

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

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

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

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

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

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

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

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

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

BEGIN {
  __FILE__ =~ m|^(.*[/\\])[^/\\]+\z|;
  require 'lib.pm';
  lib->import($1 . '../log');
}
0639ウド04/06/30 18:25ID:???
サーバー: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と設定しています。
0640ウド04/06/30 18:54ID:???
追記
ログファイルに少しでもデータがある場合(追記のような状態)、ログファイルに
セットされた文字コードが適用されるようです。
print OUT,">log.dat";とかにすると、文字コードがshift-jisに再セットされてしまいます。
Linuxからの入力は問題ありません。
0641nobodyさん04/06/30 21:37ID:???
(スクリプトファイルではなく、)フォームのページの文字コードをEUCに変えてみよう。
もしくは、CGI側でEUCに変換してもいいと思う。
あと、cgi-lib.plはもういらないでしょ。jcode.pmかencode.pmを使おう。
0642nobodyさん04/07/01 08:22ID:???
>>639
CGIで使うのならわざわざEUCに変えなくても動くでしょ。
0643ウド04/07/01 10:36ID:???
>>641
フォームも同一スクリプトで生成しているので、ヘッダではeuc-jisで指定しています。
cgi-lib.plはフォームのハッシュを扱うのに楽だったので使用していました。
今、CPANからJcode.pmを取得しインストールしました。
これと組み合わせて使ってみます。
アドバイスありがとうございました。

>>642
動きますが、個人的にEUCが好きなものでして。
製作するスクリプトのコードもEUCにしている為なにかと都合がいいのです。
0644nobodyさん04/07/01 12:52ID:oq3ug3s3
>>598
EXCELにあるような最大値を求める関数がみあたらないのですが、どうしたらいいものでしょうか?
0645nobodyさん04/07/01 13:10ID:???
>>644
それぐらい自分でサブルーチンを作りましょう。
0646nobodyさん04/07/01 13:16ID:???
>>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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

どっちも嫌なら

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

とかってのも可能だがオススメしません。
0678nobodyさん04/07/02 12:48ID:???
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;
0679黒死犬 ◆EgxBlf8nvc 04/07/02 13:26ID:???
test.txt が常にあなたの管理下にあって、
他の人が変更不可能な状況ならば問題ナッシング
068067804/07/02 13:33ID:???
>>679
ありがとうございます!txtファイルの管理には気をつけます。

print eval $_;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ご教授いただけますと幸いです。
0703nobodyさん04/07/03 17:22ID: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";
}
0704nobodyさん04/07/03 18:07ID:???
>>702
お茶呑みながらじっくりと眺めてみる。
http://member.nifty.ne.jp/hippo2000/perltips/Pg.htm

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

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

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

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

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

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

return $i+1;

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

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

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

return $i+1;

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

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

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

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

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

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

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

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

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

>>733
頑張ってください。>>726-727も眺めつつ。
0736nobodyさん04/07/04 03:33ID:???
>>732
じゃあ「CGI&Perl究極のレシピ350 とほほが教える」でも買ってみたら?
http://www.esbooks.co.jp/books/detail?accd=31095149
Perlの解説本というより目的別のサンプル集みたいなのだから
丸々コピーばかりしないで参考にすればいくらか勉強にはなるだろう。
0737nobodyさん04/07/04 07:41ID:???
俺も持ってる、トホホ氏の。
何気に役に立つよ
0738nobodyさん04/07/04 10:09ID:???
>>732
知ってると思うけど
http://tohoho.wakusei.ne.jp/wwwperl.htm
0739nobodyさん04/07/04 13:38ID: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;
}
のようなものからパスワードを探ることは・・・?
0740nobodyさん04/07/04 14:18ID:???
キーがわかるなら総当りしていけば? 単純に複合は無理でしょ。
0741nobodyさん04/07/04 14:58ID:???
暗号化前の平文をログって置けばよい。
0742nobodyさん04/07/04 18:07ID:???
簡単に複合できてしまう暗号なんてオhる
0743nobodyさん04/07/04 18:39ID:???
ハッシュの使い方が全然わかりません…
$testに環境変数の一部をUserAgent,IPみたいにコンマ区切りで入れたいだけなんですが…

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

0749nobodyさん04/07/04 21:29ID:???
>>748
ナンダコレ
釣りか?
0750nobodyさん04/07/04 22:07ID: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

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

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

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

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

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


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

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


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

ググってみたところ

$image->Strip();

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

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

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

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

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

一応うるう年は4で割り切れるって部分だけは採用してる。100年とか400年とかは
どうせ生きてないから無視した。
0782777=77304/07/06 10:39ID:???
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;}
0783nobodyさん04/07/06 10:41ID:???
お前ら今はサイバーノーガードの時代ですよ。
cookieの有効期限はリミットの2030付近にするのがナウイですよ。
0784nobodyさん04/07/06 10:52ID:???
>>782
いちいち繰り上がり計算しなくても、gmtime(time+7200)でいいような気が...
078577704/07/06 10:53ID:???
$mday -= $a[$mon];
のところは
$mday -= $a[$mon] -1;
だった。
078677704/07/06 10:56ID:???
>>784
うおーーーーーーーーーーーーーーーーーーーーーーー!?
0787nobodyさん04/07/06 12:22ID:???
重くしたくないと言って無駄なコードを書くやつは(ry
0788nobodyさん04/07/06 13:40ID: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 としか出力されないのはどうしてでしょうか、、?
0789nobodyさん04/07/06 13:51ID:???
>>788
aiu:456だけ表示されるというのならわかるんだけどなぁ。abc:123だけ表示される
のはかなり不思議だ。
0790nobodyさん04/07/06 13:51ID:???
>>788
もう一回勉強して来い
0791nobodyさん04/07/06 13:57ID:DU8HZvls
>>789
すいません、aiu:456 としか出力されない の間違いでした・・・
0792nobodyさん04/07/06 15:02ID:DU8HZvls
色々調べたのですが、何が駄目なのか良くわからないのですが、、、

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

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

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

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

ヒントでもいいので教えてくだせえ
0802nobodyさん04/07/07 05:27ID:???
>>801
あとはサーバー側のファイルに記録するくらいじゃないだろうか。
phpならその「自動的」ってのに近いと思う。
0803nobodyさん04/07/07 11:11ID:???
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
080480304/07/07 11:20ID:???
すみません。
自分で色々と勘違いをしていました。
自己解決しました。
0805nobodyさん04/07/07 12:12ID:lnfuZW7X
ある関数の中で require でファイルを取り込んでから
その関数を抜けたときって
require したファイルの内容は有効なんでしょうか?
0806nobodyさん04/07/07 12:37ID:???
>>805
有効。
何故試してみない?
0807nobodyさん04/07/07 15:17ID:???
>>798
頭大丈夫か?
0808nobodyさん04/07/07 16:04ID:???
>>807
797は明らかに間違ってるだろ?バカか?
0809nobodyさん04/07/07 16:32ID:???
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";
0810nobodyさん04/07/07 16:44ID:???
>>808
痛いからもういいよ
0811nobodyさん04/07/07 16:46ID:???
>>809

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

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

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

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

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

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

これをもうちょっとスマートに書いてみたいですが
どしたらいい? for文ははずせないのかな
0826黒死犬 ◆EgxBlf8nvc 04/07/07 20:45ID:???
grep(s/^\s*(.*)\s*$/$1/, @d);
0827nobodyさん04/07/07 20:51ID:???
>>826
(゚∀゚)サンクスコ!
grepって痴漢も使っていいんだ。勉強になりました。
0828nobodyさん04/07/07 21:40ID:???
>>824
何で俺にレスしてんの?
しかもみんなって・・・
日本語理解してるか?
ついでいっとくと俺は質問者でも解答者でもない。愉快な煽り厨
0829nobodyさん04/07/07 21:40ID:???
>>824
お前大丈夫か?
どこが叩かれてるんだ?>>810は・・・
レス一つもないじゃん。
まさか勝手に前の人と同じと認定してるとか?
0830nobodyさん04/07/07 21:45ID:???
>>824
>>810氏は誰にも叩かれてないように思えるが・・・
俺のログがおかしいのかな?再取得してみるよ
0831nobodyさん04/07/07 21:46ID:???
824は
>>797=>>807=>>810と認定したんだろう。
0832nobodyさん04/07/07 21:59ID:???
Perlでセッション関数って使えないのでしょうか?
ググっても使用例が見つからなくて困っています。
0833nobodyさん04/07/07 22:09ID:???
はぁ?
もっとググれ
0834nobodyさん04/07/07 23:02ID:???
>>833
http://www.google.co.jp/search?hl=ja&ie=UTF-8&c2coff=1&q=Perl+%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E9%96%A2%E6%95%B0&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=
PHPしか出てきませんが・・・
0835nobodyさん04/07/07 23:07ID:???
>>834
ttp://www.google.co.jp/search?q=Perl+-PHP+%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3&ie=UTF-8
( ゚д゚)ポカーン
0836nobodyさん04/07/07 23:09ID:???
>>832
Perlはね、PHPみたいになんでも関数が揃ってはいないのですよ。
モジュールを使うか自分で書くのです。
0837nobodyさん04/07/08 00:41ID:???
まあ use CGI::Session かな
0838nobodyさん04/07/08 03:00ID:???
>>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;
0839nobodyさん04/07/08 03:04ID:LQirb/WJ
今日始めてperl触った初心者なのですが
windowsで他のサーバのディレクトリを
ネットワークドライブに割り当て
その中のファイルに対して
-e を実行したらエラーしか返ってきません。
自分のサーバ内なら正常にファイルを検知できたのですが
ネットワークドライブはファイルの検査ができないのでしょうか?

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

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

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

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

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

がその後自己解決しました。
アップロード時の文字コード変換が原因で認識しなかったようです。
# 最近HDが吹っ飛んでOSアプリすべてを再インストールしたために、FFFTPの転送設定が正しくなされてませんでした
<FILE>をアスキーモード転送でアップしたところ正しい挙動になりました。
0844nobodyさん04/07/08 08:07ID:???
>>825
だれも指摘してないが、その置換では末尾の空白は
とれないよ。先に.*の方に食われちゃうので。838は
黙ってさりげなく直しちゃってるけどな(笑)
0845nobodyさん04/07/08 09:16ID:???
>>843
それは改行コード
0846nobodyさん04/07/08 11:32ID: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);
}
0847nobodyさん04/07/08 11:38ID:???
>>846
君がURLエンコードされたものをデコードしてないから。
素直にCGIモジュール使った方がいいと思うよ。
084884704/07/08 11:39ID:???
ごめん見落としてた。吊ってくる。
0849nobodyさん04/07/08 13:09ID:???
>>846
自分のスクリプトから欠陥を見つけられないならauの方の糞さを疑ったらどうだ?
三菱から欠陥を見つけられないなら乗り手の方の糞さを疑ったらどうだ?
0850nobodyさん04/07/08 13:26ID:???
とりあえず加工する前の生の入力($QUERY_DATA)をファイルか何かに書き出して
よく眺めてみるのがいいかもね。
0851nobodyさん04/07/08 13:29ID:???
GDでグラフを描こうと思ったけど
横軸が等間隔じゃないデータは
扱いにくそうだな

ほかにグラフ描くいいライブラリないかな
0852nobodyさん04/07/08 14:03ID:???
>>851
独り言の前にCPAN
http://search.cpan.org/search?m=module&q=Graph&n=100
0853nobodyさん04/07/08 14:09ID:???
各モジュールの長所・短所とかの話であれば
http://pc5.2ch.net/test/read.cgi/php/997829243/
の方がベターと思われる
0854nobodyさん04/07/08 16:34ID:???
>>818
http://developer.apple.com/internet/webcontent/xmlhttpreq.html
これ使えばいけるかもね
0855nobodyさん04/07/08 17:51ID: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
0856nobodyさん04/07/08 18:01ID:???
すいません。書き忘れました。
cgiのパーミッションは755
datのパーミッションは777
です。よろしくお願いします
0857nobodyさん04/07/08 18:02ID:???
>>855
-Tw
0858nobodyさん04/07/08 18:11ID:???
>>857
速レスありがとうございます。
-Twが間違っているのですか
あの、よろしかったらどのようにすればよいのか教えていただけないでしょうか?とりあえず抜いてみたのですが、事態は変わらず…
0859nobodyさん04/07/08 18:12ID:???
>>855
ヘッダ
0860nobodyさん04/07/08 18:13ID:???
>>855
ていうかエラーログ読めよ。まずはそれからだろ。
0861nobodyさん04/07/08 19:59ID:???
>>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";

良心で書いてやったぞ(藁
0862nobodyさん04/07/08 20:14ID:???
>>855
まともにエラーも確認できないようじゃ、大変だよ。
見られない環境なら↓こんなんもあるし。。。
http://www.kent-web.com/utility/index.html
0863nobodyさん04/07/08 20:21ID: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.
が、出てしまいます、これはどこを縦・・・じゃなくて

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

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

近いっていったいなにが?って感じです。
0868nobodyさん04/07/08 20:49ID:???
open前の行が…(ry
0869nobodyさん04/07/08 20:51ID:???
openの近くが…(ry
0870nobodyさん04/07/08 21:05ID:???
お邪魔します。
よく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

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

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

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

なぜ、このような文法が許されるのですか?
unless($_) { $_=undef; } と書かないのはなぜですか?
0875nobodyさん04/07/08 22:20ID:???
>>874
Larry Wall が許したから
0876nobodyさん04/07/08 22:22ID:???
> なぜ、このような文法が許されるのですか?
そのようにPerl上で定義されてるから。
> unless($_) { $_=undef; } と書かないのはなぜですか?
ここではunless($_)より$_を解放する処理が有るということの方が重要だから。
0877nobodyさん04/07/08 22:51ID:???
(´-`).。oO( KヨNT の中の人かなぁ。。。)
087887404/07/08 22:58ID:???
>>876
強調のための倒置法みたいなもんすね。
「帰れ! やる気無いなら!」 みたいな。
0879nobodyさん04/07/08 23:00ID:???
>>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;
}

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

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

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

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

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

>>880以降の人たち
漏れには0時過ぎに起きて2ちゃんやれるほどの元気はないぞ・・・いいな若いって。
0890nobodyさん04/07/09 11:44ID: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なども
同じ番号と判定して警告を出すためには、どのように書き直した方が
いいのでしょうか?

0891nobodyさん04/07/09 11:55ID:???
>>890
比較する前に、比較できるようフォーマットを揃える
0892nobodyさん04/07/09 12:04ID:???
両方の文字列からハイフンを除去し、マルチバイト文字をASCIIに揃え、
とかやった上で比較するわけだな。
一般には「正規化」と呼ばれる。
089389004/07/09 12:05ID:6LTGfdJz
正規表現を使って判定するとしたら、どんな記述になりますかね?
0894nobodyさん04/07/09 12:11ID:???
俺と性器表現しようよ
0895nobodyさん04/07/09 12:13ID:???
s/>>894//
0896nobodyさん04/07/09 12:36ID:???
>>893
sとm、どっちがお好き?
0897nobodyさん04/07/09 13:37ID:???
>>890
1. 双方とも全角→半角する。Encode でも Jcode でも。
2. 双方とも tr/0-9//d; にする。
3. 双方を比較する。
4. おしまい。
0898nobodyさん04/07/09 13:59ID:???
>>896
ワロタw
しかも質問が変ではない。
0899nobodyさん04/07/09 17:20ID:???
ハッシュ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に値が入っていないことが解りました。時分でも減員を調べたのですが解らなかったので、教えて頂けませんでしょうか?
0900nobodyさん04/07/09 17:51ID:???
>>899
foreach( sort{$table{$a} <=> $table{$b}}keys %table){
print "It's $_ \n";
}

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

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

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

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

>915

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

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

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

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

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

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

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

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

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

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

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

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

print $input{'1'} ;
って何を表示するのかわかってる?
print $input{$_} for 1..100; こうした方が君にはいいかも
0934名無しさん@そうだ選挙に行こう04/07/11 08:06ID:???
>>888
$input{'1'}

foreach (1..100){
print qq($_ : $input{$_} <BR>\n);
}
にしてみる。
0935名無しさん@そうだ選挙に行こう04/07/11 18:24ID:???
>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>;
093693504/07/11 18:26ID:???
あ、「GIF画像の出力」コメントは、なしです。
0937nobodyさん04/07/11 21:09ID:???
ttp://****/*.cgi?f=filename.jpgで
filename.jpgへリンクしたhtmlを出力させたいと思ってます。

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

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

?f=のような指定について調べてみたのですが、参考になるページが見つかりませんでした。
情報ありましたらアドバイスいただけないでしょうか?
0940nobodyさん04/07/11 22:26ID:???
>939
QUERY_STRINGでぐぐれ。
0941nobodyさん04/07/11 23:12ID:YH96401L
PHPだと
$array[] = "apple";
とすると配列の最後に"apple"を追加してくれるのですがこれをPerlでやる場合
簡単な方法ってどうやりますか?
0942nobodyさん04/07/11 23:14ID:???
>>941
push
0943nobodyさん04/07/11 23:20ID:???
どもです
094493704/07/12 01:23ID:???
>>940
ありがとうございます。解決しました。
0945nobodyさん04/07/12 09:47ID:???
>>942
pushって遅くね?
0946nobodyさん04/07/12 10:17ID:???
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にしてもだめなので、ここで何をサポートしているのか知りたい。
サポートしているファイル形式を知るためのメソッドってありますか?
0947nobodyさん04/07/12 10:35ID:???
>>946
ソースを読め
0948nobodyさん04/07/12 10:39ID:???
>>945
SVとかPVとか何のことだか分かる?
0949nobodyさん04/07/12 11:03ID:???
配列に小数点を入れるとき
@a = qw( 0.1 0.2 0.3 );
だとちゃんと入るんだけど
@a = { 0.1, 0.2, 0.3 };
だとなんかすっげー数字が入っている
なんでだすか?
0950nobodyさん04/07/12 11:26ID:???
@a = ( 0.1, 0.2, 0.3 );
0951nobodyさん04/07/12 11:44ID:???
>>950
なんですっげー数字が入るのか聞いているんだすよ。
095294904/07/12 11:48ID:???
>>950
ああ、そうだった
サンクスコ

>>951
確かにそれも気になるけど
0953nobodyさん04/07/12 12:53ID:???
>>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
0954nobodyさん04/07/12 12:58ID:???
>>953
正確には文字列→数値じゃないな。リファレンスを数値コンテキストで
評価するとアドレスの値が返る。
0955nobodyさん04/07/12 13:28ID:???
>>953
あ、なるほど。
0956nobodyさん04/07/12 19:33ID:???
サブルーチンにファイルディスクリプタを渡したいんですが
0957nobodyさん04/07/12 20:56ID:???
perlスクリプトをHTMLに埋め込むことって出来ますでしょうか?
例えばpingを打ちたいと思ったら
CGIだと
クライアントから要求→サーバがping実行→クライアントに実行結果を返す
ですが、
HTMLの中にスクリプトを埋め込むことによって、クライアントからpingを打つことは可能でしょうか?
うまく意味が伝わらなかったらごめんなさい_no
0958nobodyさん04/07/12 21:16ID:???
>>957
無理
0959nobodyさん04/07/12 21:26ID:???
>>956
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq5.html#How_can_I_make_a_filehandle_loca

>>957
"PerlScript" で調べ回れ。
096095704/07/12 21:40ID:???
>>958
回答ありがとうございます。
ゼミの教授が「タグで簡単に出来る」と言ってきて、
自分なりに色々調べたのですが、全くそのような情報がなかったので質問させて頂きました。
胸を張って「そんなこと出来ませんよ」って言いたいと思います!
0961nobodyさん04/07/12 21:52ID:???
>>960
お前さ、一つ前のレスも読めないのか?
0962nobodyさん04/07/13 03:39ID:???
いいじゃん
恥かくのは本人なんだから
0963nobodyさん04/07/13 05:45ID:???
>>960
ゼミの教授は嘘つきだ
Perlにタグなどない!

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

「タグで出来る」ってのも、>>960さん用語に変換されてるだけかもしれない。
0965nobodyさん04/07/13 08:12ID:???
ヘッダをimage/gifとかにして、
「<img>タグ」でアクセスとかだったら、
ちょっと、いぢわるだなぁ、その教授。
>957とりあえずガンガレ。。
0966nobodyさん04/07/13 11:28ID:???
HTMLの中にperlを埋め込むだけなら PERL_SSI とかいう手もあるが、
「クライアントからpingを打つ」てのは難しそうに思えるなあ。
それができるとたぶん物凄いセキュリティホールになる。
0967nobodyさん04/07/13 12:36ID:???
だから
無理
って言ったんですけどね・・・
0968nobodyさん04/07/13 13:17ID: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形式で表示させるためのサブルーチンです。
0969nobodyさん04/07/13 13:22ID:???
>>968
lsの結果を出力すればいいじゃん?
0970nobodyさん04/07/13 13:33ID:???
アップローダー作っておきながら、ソートもできんのか・・・
0971nobodyさん04/07/13 13:38ID:???
>>968
whileの中でhtml出力まで一気にやらなけりゃいいんじゃないの?
while内でhashなりにデータ格納して、
後で好きなようにソートなり何なりしてHTML出力すれば?
097296804/07/13 13:57ID:Q7wc8BxW
みなさまありがとうございます。

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

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

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

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

がんばってみます。 
097397004/07/13 14:03ID:???
>>972
>ファイルのアップはFTPです。
そうだったのか・・・スマンコ
0974nobodyさん04/07/13 14:12ID:???
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
097596804/07/13 15:40ID:pa0oo0i5
>>974
ヒントの宝庫ですね。
特に
>sort { $b->[3] <=> $a->[3] } # 最新更新時間を降順に並べ替え
添え字の位置はそこだったのか。。

あとアップロードされた時間を所得するのは$mtimeなんですね。。($ctimeだと思い込んでた)

一生懸命がむばってみます。ありがとうございました。
0976nobodyさん04/07/13 16:09ID:???
一度、FH というファイルハンドルで書き出しを行い、一旦閉じて、

別のファイルをFHで書き出しをしてフラッシュした場合、以前の書き出しも
フラッシュされるのでしょうか?
0977nobodyさん04/07/13 16:18ID:???
>>976
なぜ試さない?
0978nobodyさん04/07/13 16:20ID:???
>>977
なかなか判別が難しいです。やった感じでは問題ないのですが・・・

チェックの仕方や解説が載ってるサイトなどあればぜひ教えていただきたいです
0979nobodyさん04/07/13 16:55ID:???
Perlって面白いですね。
Cに慣れているので、人のコードを見るとまるでパズルをしているようです。
ところで、配列の中に入った値を、3つずつ改行して表示するには
どうかくのがスマートでしょうか?
0980nobodyさん04/07/13 17:07ID:???
>>979
forを使う。
0981nobodyさん04/07/13 17:07ID:???
>>976
No

$| = 1; なら書き出し時、それ以外は閉じた時点でフラッシュされる。
0982nobodyさん04/07/13 17:28ID:???
>>979
$i = 0;
for(@array){
print;
$i++;
print "\n" if $i%3 == 0;
}
あんまりスマートじゃないな。
0983nobodyさん04/07/13 17:32ID:???
$,= "\n\n\n";
print "@list";
0984nobodyさん04/07/13 17:51ID:???
while (@array){
@tmp = @array[0..2];
@array = @array[3..$#array];
print @tmp, "\n";
}
0985nobodyさん04/07/13 18:07ID:C9iP6fNV
ちょい質問です。

if ($] > 5) {
 eval( $icode = &jcode'getcode(\$hash{$key}) );
}
else {
 $tmp = $hash{$key};
 $icode = &jcode'getcode(*tmp);
}

Perl4でのエラーを回避しようとeval に放り込んでみたんですが
やっぱりエラーでしょうか?
0986nobodyさん04/07/13 21:43ID:???
foreach(@array){
print "$_\n";
}
0987nobodyさん04/07/13 22:08ID:???
>>985
Perl4 の実行環境が手元に無いんで確かめられんが

for ($hash{$key}) { $icode = &jcode'getcode(*_) }

で Perl4 でも Perl5 でも通ると思う。
0988nobodyさん04/07/13 22:52ID:???
でもって次スレの季節だけど、何かしらの改定点はありますかー?
0989nobodyさん04/07/13 22:57ID:???
>>988
>>5-6 、ごちゃごちゃ列挙しても誰も読まんからム板のと一緒でいいよ。
http://pc5.2ch.net/test/read.cgi/tech/1085564875/3
0990nobodyさん04/07/13 23:03ID:???
過去ログpart32が「前スレ」なままなのと、関連リンクのチェック。

あとは「コーディング」と関係のない質問者さん…
・Perl環境自体の質問とか(別板にスレがあったような)
・HTTPの仕組みについての質問とか(CGIスレへ行け、と)
・<form>の話とか(Web制作板で勉強しろ、と)
…この辺の人が、どこに行けばいいのかわかりやすくなるとよさそう。

でも「コーディングって、何?」って人のほうが多そうだなあ_| ̄|○
0991nobodyさん04/07/14 00:06ID:???
禁止ワード「<.*>」「サーバ」「HTML」「CGI」「ヘッダ」「ブラウザ」etc.
0992nobodyさん04/07/14 00:43ID:???
↓も追加希望。

まじめな質問はこちらへ。
http://pc5.2ch.net/test/read.cgi/tech/1085564875/
0993nobodyさん04/07/14 00:57ID:???
>>992
ここはCGI用途もOKだけど
そっちはCGI用途に限定された話題はあんまりオススメできないから。
0994nobodyさん04/07/14 01:12ID:???
WebProg板の住人の大半は
自分の質問が Perl に関することなのか
それとも Perl ではなく CGI や HTML についてなのかを
切り分けできないからなあ
0995nobodyさん04/07/14 01:25ID:???
>>987
サンク
0996nobodyさん04/07/14 11:25ID:???
996
0997nobodyさん04/07/14 12:12ID:???
すいません…
>>861のようにしても、>>862のチェッカでは通るのですが、動きません…
ErrorLogも見れません…
0998nobodyさん04/07/14 12:31ID:???
>>997
print "Content-type: text/html\n\n";

オマイ次スレたててこい
0999nobodyさん04/07/14 13:28ID:???
Perl コーディング初心者質問コーナー Part36
http://pc5.2ch.net/test/read.cgi/php/1089779036/
1000nobodyさん04/07/14 13:31ID:???
ついでに初の1000げと
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。