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

Perl 初心者コーナー Part21

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん03/03/18 18:47ID:Dujz7IUF
いらっしゃーい、Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。

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

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


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

過去ログやお勧めサイトは >>2-10
0263nobodyさん03/03/29 01:07ID:???
>>262
HTMLの勉強からやり直して来い。
0264nobodyさん03/03/29 01:09ID:???
>>261
セッションのキーはその何れかで残すしかない。
0265nobodyさん03/03/29 01:48ID:8vJPU8lo
>>263足りなかったです。これを実行させたいのですが、brankのフレームが6個できます
なぜ6個でどういう動作しているのでしょうか?
#! /usr/bin/perl
if($FORM{'frame'} eq 'test2'){hidari();}
elsif($FORM{'frame'} eq 'test3'){migi();}
else{test();}
exit;
sub test{
print <<END;
Content-type: text/html; charset=Shift_JIS

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN">
<html><head><title>test</title></head>
<frameset cols="50%, 50%">
<frame name="t2" src="$ENV{'SCRIPT_NAME'}?frame=test2">
<frame name="t3" src="$ENV{'SCRIPT_NAME'}?frame=test3">
</frameset></html>
END}
sub hidari{
print <<END;
Content-type: text/html; charset=Shift_JIS

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html><head><title>test2</title></head><body>test hidari</body></html>
END}
sub migi{
print <<END;
Content-type: text/html; charset=Shift_JIS

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html><head><title>test3</title></head><body>test migi</body></html>
END}
0266bloom03/03/29 01:55ID:i2vNq3FD
http://www.agemasukudasai.com/bloom/
0267nobodyさん03/03/29 02:17ID:???
>>265
なぜって、これ以外にもスクリプトあるんじゃないの?
単独のCGIじゃないでしょ
0268nobodyさん03/03/29 02:43ID:wFiuyLe9
>>265
よく考えてから質問してくれ
0269nobodyさん03/03/29 05:52ID:???
>>265
単純に$FORM{'frame'}のデコード処理がないからとか?
0270nobodyさん03/03/29 09:39ID:???
前にも見たな。$FORM{} に自動的にフォーム内容が入ると思い込んでるソース。
0271nobodyさん03/03/29 13:11ID:???
そういう楽がしたいんなら、PerlじゃなくてPHP使えってことだな。
後のことは知らんが。
0272nobodyさん03/03/29 13:35ID:???
JavaにあるisSecua()メソッドのような、
通信がセキュアであることを判定するようなメソッドが欲しいと思い、
いろいろ環境変数などを探してみたのですが、ぜんぜん見付かりません。
どうやったら確実に判別できるのでしょうか。
もしかして、「https://から始まっていたらセキュア通信!」みたいにすればOKですか?
0273nobodyさん03/03/29 14:06ID:???
>>272
isSecua() メソッドとは何をもって通信がセキュアであると判断するんだ?
あと、どこまでのセキュリティレベルを必要としてるんだ?自分で理解してるのか?

それに環境変数ごときで判断して良いなら SSL_* 変数をチェックすりゃ十分だろうし、
https:// から、なんてレベルなら SERVER_PORT でも見りゃいーじゃん。

Perl と関係ねーじゃん。よそ逝け。
0274nobodyさん03/03/29 15:06ID:GyYYsUNO
今isSecuaメソッドをPerlで書いてるんだっちゃ。
そげなこといわんと、実装方法教えてくんろ。
027525103/03/29 15:10ID:???
>>272
perlにも汚染モードがあるけどどこまで使えるかはしらね・・・
つか、全部自分で責任もつのが本来のperlだし
0276nobodyさん03/03/29 19:16ID:???
>>274 は、>>273 を読んでないのか?
何をもってセキュアだとするのか、定義を決めなければ実装もできんだろうが。
自分がやることやらないで他人に頼ろうとするな。
0277nobodyさん03/03/29 20:46ID:rt7Ytb+z
文字コードをシフトJISに変換するのにjcode.plを使用して
$value = jcode::sjis($value);と記述しています。
同じことをEncodeモジュールで行うには
どういう風に書き換えたらいいのでしょうか。
一応グーグル検索して
http://www.cise.ufl.edu/depot/www/perl/pod/perljp.html
などを読んでみたのですが、よく分からなかったです;
すみません。
0278nobodyさん03/03/29 20:59ID:NU31LA3c
>>227
>ネット上のページを取得するのに、LWP::Simpleとwgetを使う方法があるとのことで、
>それぞれで実際に取得するところまで漕ぎ着けました。

どうやるの??
0279nobodyさん03/03/29 21:11ID:???
>>278
man wget

perldoc LWP::Simple

読め
0280nobodyさん03/03/29 22:17ID:NU31LA3c
>>279
arigatou
0281nobodyさん03/03/29 23:42ID:NU31LA3c
インフォシークに
#!/usr/local/bin/perl
use LWP::Simple;

my $url = "http://www.google.com";
my $content = get($url);
print $content;
exit(0);
ってのをアップしたんだけど500になってしまいます。
なんでだろう。
0282nobodyさん03/03/29 23:53ID:???
>281
LWPが使えないから。

tu-ka,テストはローカルでやれ。
0283nobodyさん03/03/29 23:53ID:???
>>281

まずローカル鯖でテストしてからやれや、ボケ。
0284nobodyさん03/03/29 23:56ID:???
headerも無いな。

何でだろうも糞も無い。
0285nobodyさん03/03/30 00:01ID:???
LWPが使えるかどうかってどうやって調べるの?
0286nobodyさん03/03/30 00:15ID:???
使ってみる
0287nobodyさん03/03/30 00:15ID:???
>>284
headerなんて必要ないだろ
0288nobodyさん03/03/30 00:15ID:???
>>286
それだけかよw
0289nobodyさん03/03/30 00:21ID:???
>>287

500エラーって事はHTTP経由だろ?なら要るだろうが。

>>285

#! /usr/local/bin/perl

print 'Content-Type: text/html', "\n\n";

eval {
require LWP::Simple;
};
if ( $! ) {
print $!
} else {
print 'OK'
}
0290nobodyさん03/03/30 00:25ID:???
>>289
No such file or directoryこんなのでた。
0291nobodyさん03/03/30 00:54ID:???
使えないといっても二つあるよな。
ないから使えないだけなのと、自分で置いても使えないのと。
0292nobodyさん03/03/30 02:38ID:???
>>290
OKが出なかったんなら、エラーが出たってことだろ。
つまりないってことだ。少しくらい考えろ。
0293nobodyさん03/03/30 03:20ID:DsnrZpx8
print "Location: http://192.168.1.00/index.html", "\n\n";
なんですけど、すごく遅くて困ってます。
他のマシンでやると速いんですが、自マシンでやると遅いです。
スペック的には一番速いんですが。なんででしょうか?
ご教示ください。お願いします。
0294nobodyさん03/03/30 03:40ID:???
>>293
Perlとはなんもかんけーねぇじゃねーか!
問題の分類も切り分けもできんような奴はすんな!
スレ違い!
0295nobodyさん03/03/30 03:41ID:???
>>292>>294
出てゆけ。
0296nobodyさん03/03/30 04:10ID:???


春厨の季節でつね


0297nobodyさん03/03/30 04:11ID:???


なんでも春のせいにする厨房の季節でつね


0298nobodyさん03/03/30 04:16ID:???


「なんでも春のせいにする」と「特定の現象を春厨のせいにする」の違いが分からない厨の季節でつね。


0299nobodyさん03/03/30 04:45ID:???
>>298
特定の現象ってなに?具体的に述べて。
030029903/03/30 04:46ID:???
聞き直す。
特定の現象とはどの現象を指しているの?
0301nobodyさん03/03/30 05:26ID:C4JPPs9n
Perlも2チャンネルも初心者なので御門違いな質問したらごめんなさい。

Perlで掲示板を作り、携帯からそれを利用できるようにしました。
するとauの携帯から書き込む際に
cgi-lib.pl:
Unknown
Content-type:
application/x-www-form-urlencoded;
charset=shift_jis

というエラーが出ます。この原因(とできれば解決法)を
一言でいいのでどなたか教えてください。
パソコンとi-modeからはちゃんと書き込めるんですけど…。
0302nobodyさん03/03/30 05:48ID:pEUiOEbB
この頃、掲示板やそのた色々なcgiのソースを読み漁ってるんですが
結構巨大なcgiとかになってくるとサブルーチンからサブルーチンとか
ピョンピョン跳び回って、なかなか変数や配列の後を追えないと言うか
今、ココに格納されるべき変数は・・え〜っと何だっけ?アレ?
ってな具合になってしまいます。サブルーチンの引数の中にサブルーチンが
含まれててその引数にまたサブルーチンが・・見たいなことになるとマジで
混乱してしまいます。
何か良い方法はないでしょうか?
0303nobodyさん03/03/30 05:56ID:???
エディターを変えてみ
030430203/03/30 07:12ID:???
以前、perlエディタスレを見て色々試してみて今はperl Edtiorってのを
使わせて貰ってます。変数エクスプローラーってのがあってサブルーチンや
各変数にピョンピョン飛べるのが凄く助かります。
030525103/03/30 10:35ID:???
>>302 構造化エディタを個人的には使ってるけど
sjisしか使えないのがネックだなぅ
0306nobodyさん03/03/30 11:31ID:???
秀丸+尻。
0307nobodyさん03/03/30 11:40ID:???
>>301
http://www.au.kddi.com/ezfactory/tec/index.html
嫁。
0308nobodyさん03/03/30 16:51ID:???
perl初心者な者ですがIDについて質問です。

306 :nobodyさん :03/03/30 11:31 ID:[ コレ ]

こういう風に、毎回IPが一緒とは限らない実行側を
どのように判断して毎回同じIDを与えているのでしょうか?
判断材料としてはやっぱり IP、HOST、ブラウザなんかを読んで判定してるんでしょうか?
質問へぼくてすみません。
0309nobodyさん03/03/30 16:57ID:???
IPと日付
0310nobodyさん03/03/30 17:34ID:???
IPアドレスと日付と板ID
0311nobodyさん03/03/30 18:20ID:???
>>308
Perlと何の関係が?

そのうち「Perl初心者な者ですがハヤシライスの作り方について質問です」なんていう
質問が来そうで鬱だ。
0312nobodyさん03/03/30 18:30ID:???
>311
#! /usr/local/bin/perl

print "Content-Type: text/html\n\n";
print 'ハヤシライス';
exit;
0313nobodyさん03/03/30 18:36ID:???
>>312
それなら

#! /usr/local/bin/perl

print "Content-Type: text/plain\n\n";
print 'ハヤシライス';
exit;

だろうよ。
0314nobodyさん03/03/30 20:04ID:lN4HiIUc
perlのマニュアルを全文検索できるサイトはないでしょうか?
0315nobodyさん03/03/30 20:18ID:lN4HiIUc
Perlメモにある「http://www.din.or.jp/~ohzaki/perl.htm#CSVwithCRLF」
「値に改行コードを含む CSV形式を扱う」
http://www.din.or.jp/~ohzaki/perl.htm#CSVwithCRLF

を使ってみたのですが、
結果、改行を含むセルが、2行として分析されてしまいます。どうすればいいのでしょうか?
■csvファイルは、以下の通りです。
a,1,2,"あああ
いいい",かかか
あ,2839,sw,5,6
■cgiの実行結果は以下の通りです
a12"あああ<br>
いいい"かかか<br>
あ2839sw56<br>

■スクリプトは以下の通りです。
open (IN,"read_csv.csv") or die;
   while (my $line = <IN>) {
    $line .= <DATA> while ($line =~ tr/"// % 2 and !eof(DATA));

       $line =~ s/(?:\x0D\x0A|[\x0D\x0A])?$/,/;
      @values = map {/^"(.*)"$/s ? scalar($_ = $1, s/""/"/g, $_) : $_}
         ($line =~ /("[^"]*(?:""[^"]*)*"|[^,]*),/g);
    # @values を処理する
      foreach $column (@values){
        &jcode::convert(\$column, "sjis");
        print $column;
      }
        print "<br>";
    }
close IN;
0316nobodyさん03/03/30 20:46ID:???
>>315
s/DATA/IN/g
031731503/03/30 20:53ID:???
>>316
ありゃ、おはずかしい・・・感謝です
031831503/03/30 21:24ID:oGZ4ZySM
もう1ついいでしょうか?

Perlメモにある排他制御を使いたいのですが
(http://www.din.or.jp/~ohzaki/perl.htm#File_Lock)
とりあえず中身がどういう仕組みかわからないながらもとりあえず使いたいのですが、
使用方法がわかりません。。。。

# ロックする(タイムアウトあり)
$lfh = my_flock() or die 'Busy!';

# アンロックする
my_funlock($lfh);

とあるのですが、具体的に、
たとえば、./log/bbslog.txt にロック/アンロックするには、どういう書式にすればいいのでしょう
0319nobodyさん03/03/30 21:34ID:???
>>318
いや、仕組みを知るのが先だろう。
こちらのスレが参考になるかも。↓
http://pc2.2ch.net/test/read.cgi/php/1024795138/l50
0320nobodyさん03/03/30 22:14ID:???
>>319
禿同

仕組みを理解せずにコピペで作ろうとするから、>>315みたいな単純ミスをする。
0321nobodyさん03/03/30 23:58ID:???
>>314
http://search.cpan.jp/
ここなんかどうでしょ


で、私の質問ですが、
multipart/form-dataでデータを受け取って
CGI..PMでアップロードしようとしています。
で、
use CGI;
my $cgi = CGI->new;
こうした時点で/cgi-bin(実行path)にtmpファイルが作成されるのですが
これを回避することってできるんでしょうか?
あるいはせめてtmpファイル作成場所の指定をしたいわけです。
ご存知の方教えてください。

0322nobodyさん03/03/31 00:47ID:???
>>321
$CGITempFile::TMPDIRECTORY = './your/lovely/dir';
032332103/03/31 01:15ID:???
>>322
それやってみましたがダメでした。

あと環境変数TMPDIRを見るようなので
値を設定しましたがダメでした。
http://member.nifty.ne.jp/hippo2000/perltips/Cgi.htm
-private_tempfiles

回避策としてFHをcloseしてやるとtmpファイルは消されました。
結局出力先指定は上手くいきませんでしたが・・。
0324nobodyさん03/03/31 02:28ID:U3RJ6jN1
perlなるものに挑戦しようとおもっているのですが、Perl CGIを配布している方ってみんなUNIXなんですか?
UNIX環境で云々と書いているので、UNIXなんですかね。WindowsにActive Perlとhttpadじゃだめですか?
0325nobodyさん03/03/31 02:36ID:???
試してからモノを言え。
0326nobodyさん03/03/31 02:48ID:poa5fGTP
俺はWindowsにActivePerlとApacheだぞ。 気にするな
0327nobodyさん03/03/31 02:52ID:???
>>324
挑戦って何に?
使うほう?作るほう?
0328p0604-ip02sasajima.aichi.ocn.ne.jp03/03/31 05:14ID:E9hS93FY
guest guest
0329nobodyさん03/03/31 06:04ID:???
自分のマシンがWindowsでもサーバマシンは殆どUNIXでしょ。
自分が初心者で、これからPerlをやっていこうとしてて、
使えるサーバスペースがWindowsしかないのなら、とりあえず
UNIXのサーバを借りた方が勉強楽だと思うよ。
0330nobodyさん03/03/31 06:19ID:???
>>329
それはつまりサーバー上でテストしろという意味か?
0331nobodyさん03/03/31 06:24ID:???
テストはローカルでおねげぇしますだ...
0332nobodyさん03/03/31 06:33ID:???
専用サーバならOK?
0333nobodyさん03/03/31 07:03ID:z41dsEAY
>>324
将来どこまでやる必要があるかによる。
素人が遊びでやるならWindows+AnHttpd+ActivePerlが簡単でいい。
情報も集めやすいし。

将来、顧客に提供するWebサイトを目標にするなら、すくなくとも
Windowsは避ける。定番のUnix+Apache+Perl だろうね。

敷居が低いからと言ってWindowsを採用すると、保守できないシステム
になり、無理やり保守しようとしてとんでもない人件費がかかったりします。
0334nobodyさん03/03/31 07:58ID:???
いや、>>324 への回答は >>325 で必要十分だと思うぞ。
0335nobodyさん03/03/31 10:35ID:???
>>334=>>325
0336nobodyさん03/03/31 11:21ID:???
>>335
いや、違うけどまあいいぞ。
↓次どぞん。
0337nobodyさん03/03/31 14:00ID:???
>>327
作るほうです。。
CGIの無料配布している方ってやっぱりUnixなんですかね?
0338nobodyさん03/03/31 14:16ID:???
ソウデモナイヨ
Linuxとかの環境での動作確認はしてるだろうけど。
0339nobodyさん03/03/31 14:35ID:9YoHT9pl
>>337
>>333 読んでないの?
0340nobodyさん03/03/31 15:37ID:???
>>338
どの程度の確認でしょうか?無料HP(Unix)で動いたらOKぐらいでいいのかな?
0341nobodyさん03/03/31 15:55ID:???
>>340
お前は誰だよ?元質問者か?
0342nobodyさん03/03/31 15:58ID:???
>>341
違います。どの程度かなと思ってきいただけです
0343nobodyさん03/03/31 16:04ID:???
>>340
動いたらOKとかいうより、Perlのバージョンに依存する部分があるか、
コマンドも使うならサーバによって使えないこともあるなど
書く前か書いてる最中にわかること。
0344nobodyさん03/03/31 16:14ID:???
>>343
なるほどぉ。。。
ちなみにVine Linuxってやつでもいいんですか?あれならCD持ってるからインスコしてみようかなぁ、とおもうんだけど。
WinとLinuxのデュアルブートっていうのは問題ないんですか?
0345nobodyさん03/03/31 17:45ID:???
>>344
スレ違いどころか板違い。とにかく、
 
 

      試  し  て  か  ら  モ  ノ  を  言  え。
 
 
 
0346nobodyさん03/03/31 17:56ID:???
>>345
氏ね屑
0347nobodyさん03/03/31 18:17ID:???
>>WinとLinuxのデュアルブートっていうのは問題ないんですか?
漠然とした不安をそのまま投げるなよー。

なんでもかんでも誰かに聞いて苦労をせずに済ませたいなんてのは
プログラマ向けな性分じゃない。
取りあえずそのユーザ側的思考から抜けれ。
0348nobodyさん03/03/31 18:45ID:???
まぁ君はどうせ途中で投げ出すだろうから、
最初からやめとけってこった
0349nobodyさん03/03/31 18:59ID:???
>>346
うっせボケ
0350nobodyさん03/03/31 19:02ID:a8GlaiRt
疑問は、自分で解決するのが一番早い。普通は。
0351nobodyさん03/03/31 19:06ID:???
Cafestaは、日本初のコミュニケーションポータルサイト
無料会員登録で、もれなく商品券が貰えるキャンペーン実施中!!
http://camellia16.fc2web.com/cafesta.html
0352nobodyさん03/03/31 19:09ID:???
↓そろそろ、Perl の質問をしておくれでないかい?
0353nobodyさん03/03/31 19:20ID:WQCBJdN9
特定のページ以外からの掲示板への直リンクを防ぐにはどうしたよいでしょうか?
0354nobodyさん03/03/31 19:24ID:???
>>353
厳密には無理。
一応、Perl スクリプト内でできるレベルとしては、
環境変数 HTTP_REFERER を見て判断するという方法がある。

その他、.htaccess を利用する方法もある。
こちらの解は該当スレへ。

そもそも、検索かけりゃ一発で答が出ると思うが?
0355nobodyさん03/03/31 19:32ID:???
>>354
それで直リンクは防げるのだろうか?
ジャンプしてくるのは防げるだろうが。
0356nobodyさん03/03/31 19:37ID:???
ヨソからジャンプしてくるのは大抵リンクじゃないかな?
まぁこの手の質問って、こう返すしかなくない?
0357nobodyさん03/03/31 19:37ID:a8GlaiRt
じゃあ、HTTP_REFERERが空っていうのも規制すれば。
0358nobodyさん03/03/31 19:38ID:???
>>353
ほらよ〜
http://www.google.com/search?num=100&hl=ja&ie=UTF-8&oe=UTF-8&c2coff=1&as_qdr=all&q=%E6%8E%B2%E7%A4%BA%E6%9D%BF%E3%81%B8%E3%81%AE%E7%9B%B4%E3%83%AA%E3%83%B3%E3%82%AF%E3%82%92%E9%98%B2%E3%81%90&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=
特定のページを直リンクされたらどうすることも出来ませんがね。。。
035935303/03/31 20:04ID:WQCBJdN9
どうも有り難うございます、助かりました。
0360nobodyさん03/03/31 20:19ID:???
LWP::Simple;を 使うにはどういう風にサーバーの設定をすればいいですか?
0361nobodyさん03/03/31 20:33ID:???
>353
「特定のページ」とやらが同一サイト内なら、有効期限付きのCOOKIEを使う手もあります。
しかし、Perlの話じゃなくなるので、相応しいスレを探してください。
0362nobodyさん03/03/31 20:34ID:???
>360
サーバーの設定に関することは、UNIX板などで聞いた方がいいと思われます。
■ このスレッドは過去ログ倉庫に格納されています