【Perl 】初心者コーナーPart8
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。
01/10/24 14:11ID:???1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ、良い回答は良い質問から。
一緒に勉強しましょう。
参考書籍はこちら【【Perl,CGI】参考書籍 第2版 】
http://ebi.2ch.net/test/read.cgi/php/988809842/l50
CGIの質問はこちら【CGIだけど、なんか質問ある?part4】
http://ebi.2ch.net/test/read.cgi/php/1000804655/l50
過去ログ、その他の役立ち情報は>>2-10を見よう。
0369名無しさん@お腹いっぱい。
01/11/20 00:17ID:???forの方が後だろ(w
0370名無しさん@お腹いっぱい。
01/11/20 00:19ID:???0371名無しさん@お腹いっぱい。
01/11/20 00:34ID:???他人を主人公にして自分の思い出を語るのはやめれ。
0372名無しさん@お腹いっぱい。
01/11/20 00:45ID:???あれは小学5年頃の話でしょうか
話について来れなくて気を悪くなされたならごめんなさい。
0373名無しさん@お腹いっぱい。
01/11/20 01:31ID:???0374名無しさん@お腹いっぱい。
01/11/20 01:35ID:???ってことでしょーか?
0375名無しさん@お腹いっぱい。
01/11/20 03:42ID:???369をどう読めばforで挫折したと解釈出来るんだ?
ぼうやはforより先にひらがなを勉強すべき(w
0376名無しさん@お腹いっぱい。
01/11/20 06:49ID:???0377名無しさん@お腹いっぱい。
01/11/20 17:18ID:???あの頃はフロッピーディスクなんて高嶺の花・・・
0378名無しさん@お腹いっぱい。
01/11/21 01:35ID:???例えばstring = "hoge#poyo#1000#comment"、みたいなデータが有ってCommentだけが
不定長だとするとCとかならstring[4] = '\0';とかしてmoveせずにガンガン使えるんだけど
splitだとCommentの最後までループしちゃうし、値をコピーするから
凄く遅そうですよね。commentが10000バイトとかだと結構差が有るんで
何とかしたいんです。
BBSなんかの行解析は大抵splitを使ってるけど・・・・
indexとか使って上手く出来ないですかね・・・・
0379適当に即答。
01/11/21 01:41ID:???0380名無しさん@お腹いっぱい。
01/11/21 07:57ID:???comment以外が固定長なら
substr($string,14,length($string))
でできないかな?
0381名無しさん@お腹いっぱい。
01/11/21 20:46ID:???30代オヤヂ族かよ(w
いいトシして板スレ違いは自粛しようぜ(大爆笑)
0382名無しさん@お腹いっぱい。
01/11/21 22:47ID:???0383名無しさん@お腹いっぱい。
01/11/22 13:24ID:???0384名無しさん@お腹いっぱい。
01/11/22 14:27ID:???0385名無しさん@お腹いっぱい。
01/11/23 06:07ID:rvdfMFcf今Vivi使ってますが試用期間過ぎてるのでウザイです。
シェアの定番は秀丸というのは知ってますがフリーで
いいのありませんか?
あまりいいのなければViviに3000円出そうと思ってるのですが。。
0386_gunzip@vimマンセー
01/11/23 06:39ID:???Viviっていえば、たしかvi互換エディタだったよね?
Windows版vim(gvim)はどうでしょうかね。
本家 http://www.vim.org/
Windows版 http://www.kaoriya.net/(日本語)
0387名無しさん@お腹いっぱい。
01/11/23 06:45ID:???そのためのツールは何て名前でしたっけ?
いくら検索しても見つかりません。
よろしくお願いします。
0388白夜 ◆GiKO.QrM
01/11/23 07:06ID:???パールエディタってのを一応持ってる。
あんまり使わないけど一応フリーなんで。
ttp://www.k-collect.net/
0389名無しさん@XEmacs
01/11/23 07:14ID:MqJMqOjcperlcc
perl2exe
0390名無しさん@お腹いっぱい。
01/11/23 11:53ID:???0391名無しさん@お腹いっぱい。
01/11/23 16:39ID:???Tera Padというのが雑誌で評判よかったのでDLしてみたけど
マルチウィンド出来ないので使いづらかった。
やはりいいやつはお金出すしかないかも。
0392名無しさん@お腹いっぱい。
01/11/23 23:17ID:???…せっかくだから定番だがXEmacsとかMeadowとかxyzzyとか。
0394名無しさん@お腹いっぱい。
01/11/24 00:08ID:2uJfuz0i地味な面構えが邪魔にならなくて素敵。
って、お試しで使い始めたばかりの奴が言うのもなんだけど。
0395正規表現わけわからん
01/11/24 00:08ID:ZE9o/Xh4のってどうやればいいんですか?
0396名無しさん@お腹いっぱい。
01/11/24 01:43ID:???http://pc.2ch.net/test/read.cgi/php/996105815/104-
0397正規表現わけわからん
01/11/24 01:50ID:???まじさんくす!ログ全て読む気になれなかったんで。
0398名無しさん@お腹いっぱい。
01/11/24 02:21ID:QdQjjDaqサイト全体をgzip+tarで圧縮、新サーバーへファイルを転送、解凍
というプロセスでサイトの移転は出来ますか?
パーミッションをそのままでできたらいいな、と思うのですが。
0399名無しさん@お腹いっぱい。
01/11/24 02:30ID:???0400名無しさん@お腹いっぱい。
01/11/24 07:30ID:???日付を乱数に変換したいのですがどうすればいいでしょう?
たとえば01/11/24 02:30をランダムな英数字に暗号化のやり方が
わかりません。
一応自分なりに考えて
日付 = (( 日付 ) + 1 ) * 123;
などのように考えてやってみたのですが
どの日付も同じ結果になってしまって・・・。
だれかヘルプミー(;;
0401名無しさん@お腹いっぱい。
01/11/24 07:46ID:???$salt = "abcde";
crypt($salt, time());
0402名無しさん@お腹いっぱい。
01/11/24 07:53ID:???ちょっと質問していいですか?
そのcryptとはどういう意味を持つ単語でしょうか…。
$salt = "abcde";
crypt($salt, time());
って、$salt = "abcde";で、$saltはabcdeという意味にしてってところまでは
わかるのですが、下のcrypt($salt, time());がよくわからないので・・・。
time()が上で私がいった日付のことで、
で、ランダムにした日付を表示させたい場所に$saltを書くってとこまで理解したのですけど・・・
0403名無しさん@お腹いっぱい。
01/11/24 07:56ID:???cryptはどういう効果を出すんでしょうか。
あと$saltとtimeの間にいれる,もよくわからなくて・・・。
cryptはシャッフル。
,は合わせるという意味で、
シャッフル(abcde 合わせる 日付)
という感じなんですか?
0404名無しさん@お腹いっぱい。
01/11/24 08:19ID:???あ、引数逆だった。 crypt(time(), $salt) でよろしく。
$perldoc crypt
$man 3 crypt
http://www.nlp.ie.niigata-u.ac.jp/~hiro/parole/kh.html
0405これを読んでも。。。結局わかりにくいかな?
01/11/24 16:01ID:???乱数というのは、求める度に違う数になって、別々に出した乱数が同じ数字になることはあり得ないものです。
日付を乱数に変換しても、適当に乱数を求めても、本質的な違いはないはずなんです。
ただ今の普通のコンピューターには本当の乱数を出す機能はありませんので、
「日付を種に、擬似乱数を生成する」ということはあります。(種が日付だけだと、かなり危険ですが。)
でもこれはたぶんおっしゃられていることと違うと思います。
日付から、一見でたらめに見える数を求めるということがしたいのだと思います。
このとき、日付→数 は求められても、 数→日付は求められないようにするのが、
「ハッシュ関数」というものです。
ハッシュ関数の場合、入力が同じである場合、出力は必ず同じものになります。
だから、考えられる全ての日付を入力して再計算をすれば、どの日付から求めたのかは
たちどころにわかってしまいます。
そのような攻撃をちょっとだけ、やりにくくするのが、味付け作業(塩を振る)という作業です。
ただ、saltは4096通りしかあり得ないので、総当たりすればばれてしまうことには代わり有りません。
注意が必要です。
最近は、cryptよりもmd5の方が流行っています。
2chでは、トリップはcryptで、IDはmd5でやっているようです。
数→日付 の再計算ができるようにしておくこともあります。この場合は、
共有鍵暗号や、公開鍵暗号を使うことになります。
0406名無しさん@お腹いっぱい。
01/11/24 16:12ID:???0407名無しさん@お腹いっぱい。
01/11/24 16:53ID:???0409名無しさん@お腹いっぱい。
01/11/24 23:28ID:PCZZBwJCPerlでCGIの勉強をしようと想い、参考書に付属してあった
PerlとApacheというWebサーバをインストールしました。
そしてまず基本の文字を出力すると言うコードを書き、
IEのブラウザから、そのCGIファイルがあるディレクトリを指定したのですが、
ブラウザに表示されず、そのCGIファイルをダウンロードしてしまいます。
IEの設定が間違っているのでしょうか?
解決方法お分かりでしたら教えてください
0410名無しさん@お腹いっぱい。
01/11/24 23:42ID:???貴方はとんでもない思い違いをしています。
参考書をもっとよく読みましょう。
0411409
01/11/24 23:58ID:???もう一度読みましたが分かりませんでした。
このApacheというソフトをインストールし、起動していれば
通常のようにネットに繋いでサーバにアクセスしなくてもいいんですよね?
どうか先ほどの説明して頂けないでしょうか
0412名無しさん@お腹いっぱい。
01/11/25 00:20ID:???0413名無しさん@お腹いっぱい。
01/11/25 01:09ID:ytkqM1hXopen(DATA, "<./honbun.dat");
$bundata = <DATA>;
としてhonbun.datというファイルを$bundataに全て読み込めるのですが
下記のようにファイルパスを絶対参照にするとエラーが出てしまいます。
open(DATA, "<http://www.domain.com/honbun.dat");
下記のようなエラーメッセージです
[an error occurred while processing this directive]
パスを変更しただけで、他は何も変えてないんですが。
ちなみにSSIのincludeを使ってCGIを呼び出してます。
対処法アドバイスお願いします。
0414すみません
01/11/25 01:21ID:2tsqouHYインストールしました。
そこから、その本に書いてあるとおりにプログラムを始めたいのですが、
メモ帳で作っても良い、という風に書いてあったのでメモ帳で書いたのですが。
メモ帳で作ったデータをhello.plという名前で保存して、
MS DOS プロンプトでperl hello.plとしても、
Can't open perl script"hello.pl"〜以下と出てしまいます。
確認しましたが、確かにPerlのインストールはされていたのです。(Cドライブに入れました)
これにはどのような理由が考えられるでしょうか?
0416名無しさん@お腹いっぱい。
01/11/25 02:13ID:zHplANiE>IEのブラウザから、そのCGIファイルがあるディレクトリを指定したのですが、
「アドレス」で指定せずに「ファイル」→「開く」にしたんじゃ?
0417413
01/11/25 02:15ID:ytkqM1hX他のサイトのhtmlファイルを読み込みたいんです(許可はとってあります)
その際、>>413のようにopenでアドレス指定でいいかと思ったんですが、
うまくいかないのです。それ以前に自分のサイト内でも絶対参照でopenしようと
してもエラーが出ます。読めていたファイルが絶対参照にしただけで読めなく
なるのでパーミッションではないと思うんですが。
0418名無しさん@お腹いっぱい。
01/11/25 02:38ID:???あなたが ./hoge.html とか index.html で読めていたファイルの
絶対パスは C:\www\hoge.html や /home/foo/public_html/index.html
で http://bar.com/hoge.html では***ありません***
って言うかそんな事出来たら困るでしょ?
httpd 仮想パス で検索しよう
0419413
01/11/25 02:49ID:ytkqM1hXニュース記事のhtmlから見出し記事を自動抽出しようと思ったんですが。
(くどいですが許可はとってます)
見出しをdatにしてないのでhtmlから読み込むしかないよ〜と言われたもので
そのまま出来るのかなぁと。
調べてはみますが、無理って事なんでしょうか?
0420名無しさん@お腹いっぱい。
01/11/25 03:17ID:???それならLWPモジュール使うといいっす。
use LWP::Simple;
$bundata = get("http://www.domain.com/honbun.dat");
0421名無しさん@お腹いっぱい。
01/11/25 03:18ID:???LWP::Simple と言うモジュールを使えば簡単に取ってこれます。
自分で書くことも出来ますが、、
どっちにしても、サーバがPerl(と言うかユーザ)にSocket接続を許している
のが大前提だけどね
http://x68000.startshop.co.jp/~68user/net/ ここをざっと読んでみて
0422414
01/11/25 06:57ID:DFU5N1cCあ、多分それです。本にもパスがどうとか書いてあったし・・・。
ただ、それについてのやり方が全く具体的に書いてなかったので
分からないのです。。
初歩的すぎて書くまでもないことだったのかもしれませんが、
ちょっと始められなくなってしまってるので・・・
手順を教えていただけないでしょうか?
他のHPのPerlページでも、そこまで基本的なことは載っていないんで・・・
すみません。
0423413
01/11/25 09:56ID:ytkqM1hXLWPモジュールというのは聞いたこともなかったですが調べてみます。
420と421さん別人ですよね?タイミングがすごいなぁ(^^;
0424413
01/11/25 10:08ID:???Cドライブのルートにperlがインストールされてると思うので
CドライブルートにあるAutoecec.batファイルにperlのパスを記述して
みるといいです。メモ帳で開いて大丈夫です。
上のほうにpath "%path%;c:\Perl\bin;"としてみて下さい。
書き換える前に、一応batファイルのバックアップとって下さいね。
書き換えたあとにパソコン再起動してから試して下さい。
0425414
01/11/25 10:16ID:sJfjrujtありがとうございます。
後で挑戦してみますね。
本に
Autoexec.batに以下のような記述をします、
PATH C:\WINDOWS;C:\WINDOWS\COMMAND
SET PATH=%PATH%;E:\USR\PERL5\BIN ←この行を追加する
とかかれていたのですが、
AUTOEXECを開くと
Must Be installed Japanese Mode.
Cannot Install Device Driver.と出てしまいます。
これはどういうことなんでしょう?
日本語版をインストールすることが必要ということなんでしょうか?
0427414
01/11/25 19:45ID:elN1fKSW了解です。ありがとうございます。
連続教えてチャンで恐縮なのですが、MS-DOSを勉強するのに何かオススメの
書籍・サイトってありますか?
検索サイトで調べても、ダウンロードとかについてしか
見つからないので・・・。
0428名無しさん@お腹いっぱい。
01/11/26 12:50ID:z2hJCNpLhttp://www.nara-edu.ac.jp/~asait/latex/msdos.htm
こんなところかな。他にもあるだろうけど。
身近にCGI勉強中で、HTMLとDOSの使い方も同時に学ぶ必要があって
苦労している人がいるからつい気になってしまった。
こういうことは知ってる人がいたほうがいいと思うけど、そういう知り合いは
いないの?
0429名無しさん@お腹いっぱい。
01/11/26 19:19ID:o9/cvZ3VNT3.51ServerでWin32::DDEをuseできるようPerlを導入したいのですが、可能でしょうか。
実はActivePerl5.6.1-630をインストールしようとしてMSVCRT.DLLが足りないといわれ、
何とかインストールしてもPerlCRT.dllが足りないとかいわれてWin32::DDEがuse出来ないのです。
0430429です
01/11/26 19:22ID:o9/cvZ3VWin32環境では必要ないのでしょうか?
0431名無しさん@お腹いっぱい。
01/11/26 21:13ID:???0432名無しさん@お腹いっぱい。
01/11/26 22:11ID:???インストーラはバージョンアップ済み?
0433429
01/11/26 22:37ID:Owo3tZsObatchからインストールです。
>>431 perlcrt.dllがなぜ必要になるのか私も不思議です。
0434名無しさん@お腹いっぱい。
01/11/26 22:58ID:???InstMsi.exeを先にインストールしないとだめだよ〜ん
0435名無しさん@お腹いっぱい。
01/11/27 00:49ID:9VBxm652i-modeはリファラーが取れないのを利用してi-modeとPCを
振り分ける下のようなCGIを書いたのですがうまくいきません。
どこが間違ってるのでしょうか?
ちなみに初心者ですので大勘違いしてたらすいません。
#!/usr/bin/perl
$a1 = $ENV{'HTTP_REFERER'};
if ($a1 eq '') {
print "Location: http://www.aaa.com/i-mode.html\n\n";
}else{
print "Location: http://www.aaa.com/pc.html\n\n";
}
exit;
0436名無しさん@お腹いっぱい。
01/11/27 00:52ID:???PCからだってReffererを吐かない場合は幾らでもあるよ。
0437名無しさん@お腹いっぱい。
01/11/27 01:09ID:???0438名無しさん@お腹いっぱい。
01/11/27 01:26ID:???0439名無しさん@お腹グー
01/11/27 03:17ID:???ttp://www.activestate.com/Products/ActivePerl/download.plex から
リンクを辿ってInstMsi.exeを導入してからMSI versionのActivePerl
5.6.1-630をインストールし直した方が早いだろう。 Win32-DDEはppmで
インストールしろ。
MSVCRT.DLLについて文句言われるならversionが古いんじゃあないの?
NT3.51Serverはアップデートしてあんのかよ。perlcrt.dllはbuild
5XXの時の話だよ。 欲しいならCPANにある、取ってこい。
0440名無しさん@お腹いっぱい。
01/11/27 06:36ID:LKRP0gaEウェブサイト更新時刻情報取得エージェント?(いわゆるアンテナ)を
作るためにはどの言語を勉強する必要があるんでしょうか?
↓こういう感じの奴
http://www.st.rim.or.jp/~kiwamoto/hina/
Perlであってます?
0441名無しさん@お腹いっぱい。
01/11/27 07:10ID:???0442440
01/11/27 07:28ID:???ありがとございます。
ちなみに鯖の条件としては、CGI使えれば問題ないですかね?
0443名無しさん@お腹いっぱい。
01/11/27 07:35ID:???0444名無しさん@お腹いっぱい。
01/11/27 08:03ID:???0446名無しさん@お腹いっぱい。
01/11/27 08:50ID:???読めません。
0447名無しさん@お腹いっぱい。
01/11/27 11:30ID:???犬か何かに見える。
新キャラクター鯖犬誕生! 何の話だ。
0448名無しさん@お腹いっぱい。
01/11/27 11:35ID:???\ ++ __ ノ ・
鯖犬です > ノ ノ \
_____________/
0449名無しさん@お腹グー
01/11/27 13:58ID:???0450名無しさん@お腹いっぱい。
01/11/27 14:09ID:???少しでもメモリの浪費を抑えたいんだけど
そういう場合foreachは使わないほうがいいの?
0451名無しさん@お腹いっぱい。
01/11/27 14:36ID:???フォルダ内に二つのHTMLファイルを用意して
例えば a.htm と b.htm としてですね。
条件によってどちらかを表示させたいんですがどのようにすればいいの
でしょうか?
簡単なようでなぜかつまってます
0452名無しさん@お腹いっぱい。
01/11/27 15:20ID:???んなこたぁない。
>>451
print "Content-Type: text/html\n\n";
if ($jouken == 1) {
open HTML, './a.html';
while (<HTML>) {
print;
}
close HTML;
} elsif ($jouken == 2) {
open HTML, './b.html';
while (<HTML>) {
print;
}
close HTML;
}
0454名無しさん@お腹いっぱい。
01/11/27 15:49ID:???んあ?
my $file = undef;
if (条件) {
$file = 'a.html';
} else {
$file = 'b.html';
}
open(F, $file);
print <F>;
0455名無しさん@お腹いっぱい。
01/11/27 15:56ID:FtCrXKQ90456名無しさん@お腹いっぱい。
01/11/27 19:45ID:???0457クロスボウとやら
01/11/28 11:10ID:4pa3crZc掲示板等のCGIで、投稿記事のIDに
$id = time . $$; # id = UTC秒数 + Perlプロセス番号
としてるものを見つけました。で、質問は2つ。
Q1:この$idはユニークな値であることが保証されるのでしょうか?
Q2:Q1がユニークであると仮定した場合、プロセス番号を付加する
メリットはなんでしょうか?
以上、よろしくデス。
0458名無しさん@お腹いっぱい。
01/11/28 11:38ID:???1秒の間に同じプロセスIDが使われるような異常な環境でない限り大丈夫だと思います。
A2
1秒間に複数の記事投稿処理が行われた場合被ってしまいます。
常時、処理に1秒以上かかる重いスクリプトの場合は大丈夫な場合もあります。
0459名無しさん@お腹いっぱい。
01/11/28 11:47ID:???短期的に見れば pid だけでも十分ユニークです。
pid に時刻を追加することで、長期的にもユニークであることを保証している、と考えた方がいいと思う。
というか、時刻だけってユニークなIDとして使い物にならない。
0460東京地裁は役立たず!
01/11/28 12:19ID:???1 :ひろゆき@暫定管理人 ★ :01/11/01 15:49 ID:???
「削除依頼は公開」の原則に従って削除したものを公開してますー。
ソース。
http://www.dd.iij4u.or.jp/~cap/nissei/
14 :名無しさん@お腹いっぱい。 :01/11/01 15:59 ID:I8TSGCyI
むしろこのGIFを保存しといてそこらにミラー作りまくるのが
2chねらの使命かと
15 :名無しさん@お腹いっぱい。 :01/11/01 16:00 ID:pX4yzwVD
>>10 つか、それがひろゆきのねらいだろ
16 :名無しさん :01/11/01 16:00 ID:4XQtcOuc
オイラはとりあえず保存しといたよ
17 :ひろゆき@暫定管理人 ★ :01/11/01 16:01 ID:???
いやぁ、削除依頼は公開って原則ですから、、
( ̄ー ̄)ニヤリ
18 :va :01/11/01 16:01 ID:+W2rWnl4
同じこと書き込んだら、速攻で削除されるのかな?
0461名無しさん@お腹いっぱい。
01/11/28 12:34ID:8tU8XC0g(B.pl)が実行される仕組みをSSIを使わずに実現することは可能でしょうか?
<IMG SRC="../cgi-bin/B.pl" 〜>とかやってみたのですが、一応B.plは
実行されるものの、「画像無し」の×マークが表示されてまずいです。
どうか知恵をお貸しください。 既出っぽい気がしますが(;´Д`)
0462名無しさん@お腹いっぱい。
01/11/28 12:42ID:???0463名無しさん@お腹いっぱい。
01/11/28 13:31ID:???ディレクトリ html にHTMLファイルとロゴなどのgifやjpegを
いれておきました。そこに .htaccess を置いて
order deny,allow
deny from all
allow from ***.***.***.***
と書いておいてCGIにてIDとパスで認証できた会員だけHTMLを
見せようとしたんです。
ところが、普通に文字は表示されるのですがgifやjpegが表示されない
のです。
普通に表示できないものなのでしょうか?
0464461
01/11/28 13:36ID:8tU8XC0g「CGIで画像を出力する」で検索してやり方を調べ、やってみました。
B.plは
#!perl-path
print "Content-type: image/gif\n\n";
print `cat $imagefile`;
でできました!!!
1x1の画像を作るのはペイントでできたんですね。知らなかったです。
ありがとうございました。
0465名無しさん@お腹いっぱい。
01/11/28 13:47ID:???basic認証使えば?
.htaccess
---
AuthType Basic
AuthName "Password"
AuthUserFile /home/user/.passwd
require valid-user
---
.passwd
---
User1:Password1
User2:Password2
0467名無しさん@お腹いっぱい。
01/11/28 15:22ID:???■ このスレッドは過去ログ倉庫に格納されています